3

だから..私はここにサーバーソケットを持っています:

ServerSocket server = new ServerSocket(5000);  

while(true){  
    Socket cliente = server.accept();  
    Thread thread = new Thread(new Converter(cliente));  
    thread.start();  

私のアプリはWord文書(.doc)をPDFに変換します。最初に、サーバーは.pdfアーカイブで応答した後、.docを受け取り、変換を行います。

応答を待っているクライアントを取得するにはどうすればよいですか?

4

2 に答える 2

2

私があなたを正しく理解していれば、受け入れられたソケット (つまりクライアント) ごとに 1 つのスレッドを作成しています。このConverterスレッドは、クライアント ソケットにアクセスできます (すべてのクライアントには、 によって返される異なるソケットがありますaccept())。解決策は非常に簡単です。

public void run() {
    cliente.getInputStream();  //read .doc first
    //do the conversion to .pdf
    cliente.getOutputStream();  //send .pdf back
}
于 2012-10-29T19:27:01.513 に答える
1

得る:

private void getDocArchive(){  

    try {  

        InputStream in = socket.getInputStream();  
        BufferedInputStream buffer = new BufferedInputStream(in, 1024);  

        byte[] b = new byte[1024];  
        int len = 0;  
        int bytcount = 1024;  

        FileOutputStream out = new FileOutputStream("docs/atual.doc");  

        while ((len = buffer.read(b, 0, 1024)) != -1) {  
            bytcount = bytcount + 1024;  
            out.write(b, 0, len);  
        }  

        out.flush();  

        //out.close();  
        //buffer.close();  

    } catch (IOException e) {  
        System.out.println("Ocorreu um erro no recebimento do arquivo");  
    }  
} 

応答:

private void reponse() {  
    try {  
        OutputStream out = socket.getOutputStream();  
        InputStream in = new FileInputStream(pdf);  

        BufferedInputStream buffer = new BufferedInputStream(in, 1024);  

        byte[] b = new byte[1024];  
        int len = 0;  
        int bytcount = 1024;  
        int i = 0;  

        while ((len = buffer.read(b, 0, 1024)) != -1) {  
            bytcount = bytcount + 1024;  
            out.write(b, 0, len);  
        }  

        out.flush();  
        out.close();  
        buffer.close();  
    } catch (IOException e) {  
        e.printStackTrace();  
        System.out.println(e.getMessage());  
    }  
}  

私の顧客:

public static void main(String[] args) throws Exception {  

    try {  

        Socket client = new Socket("127.0.0.1", 5000);  

        OutputStream out = client.getOutputStream();  
        InputStream in = new FileInputStream("C:\\autistmo.docx");  

        BufferedInputStream buffer = new BufferedInputStream(in, 1024);  

        byte[] b = new byte[1024];  
        int len = 0;  
        int bytcount = 1024;  

        while ((len = buffer.read(b, 0, 1024)) != -1) {  
            bytcount = bytcount + 1024;  
            out.write(b, 0, len);  
        }  

        // resposta  

        BufferedInputStream buffer2 = new BufferedInputStream(in, 1024);  
        FileOutputStream out2 = new FileOutputStream("docs/final.doc");  

        while ((len = buffer2.read(b, 0, 1024)) != -1) {  
            bytcount = bytcount + 1024;  
            out2.write(b, 0, len);  
        }  

        out2.close();  
        buffer2.close();  

    } catch (Exception e) {  
        // TODO Auto-generated catch block  
        e.printStackTrace();  
    }  

実行方法:

@Override  
public void run() {  
    getDocArchive();  
    converter();  
    reponse();  
}  
于 2012-10-29T19:40:00.043 に答える