0

大学の仕事のための私のアプリ..

DOC から PDF

==

私のサーバー:

要求ごとに 1 つのスレッド

        server = new ServerSocket(5000);

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

私のクラス Requisitor (メソッドを実行)

@Override
public void run() {
    // receive doc binary
    receive();
    // doc to pdf
    Conversor converson = new Conversor(new File("docs/"+cliente.getInetAddress().getHostAddress()+".doc"),new File("pdfs/"+cliente.getInetAddress().getHostAddress()+".pdf"));
    converson.converter();
    //response pdf binary to client
    response();
}

しかし、メソッド receive() は呼び出されません..クライアントソケットを切断した場合のみ。

私のクライアントソケット:

    Client cliente = new Client();
    cliente.connect();
    cliente.send(); // send doc binary

    boolean flag = true;

    while (flag) {
        if(!cliente.streamIsEmpty()){ // wait for conversion
            cliente.receive(); // receive pdf
            flag = false;
        }
    }


    cliente.disconect()

私の受け取り方法

        InputStream in = cliente.getInputStream();
        BufferedInputStream stream = new BufferedInputStream(in);
        FileOutputStream out = new FileOutputStream("docs/"+cliente.getInetAddress().getHostAddress()+".doc");

        byte[] buffer = new byte[1024];
        int length = 0;

        while((length = stream.read(buffer, 0, 1024)) != -1) {
            out.write(buffer, 0, length);
        }

        out.flush();
        stream.close();

何か案が?:(

4

2 に答える 2

1

あなたの質問は不明です。receive と呼ばれる 2 つのメソッドがあるようです (クライアントに 1 つ、サーバーに 1 つ)。「メソッド receive() が呼び出されていない」と言っていますが、どのメソッドが呼び出されていないかはわかりません。

しかし、間違いなく間違っていることが 1 つあります。

boolean flag = true;
while (flag) {
    if (!cliente.streamIsEmpty()) { // wait for conversion
        cliente.receive(); // receive pdf
        flag = false;
    }

あなたのコードはビジー待機中です。これは悪いことです。その上、そのように待つ必要がない場所。... を呼び出すだけcliente.receive()で、何かが到着するまでブロックされます ... またはサーバーが切断されます。

于 2012-11-01T04:10:34.510 に答える
0

ここでは、ストリーム read によって -1 が返されるまで読み取ります。これは、ソケットが閉じているときに発生します。ドキュメントを書き込んだ後、(ソケット全体ではなく) cliente.send() 内で OutputStream を閉じてみてください。

    while((length = stream.read(buffer, 0, 1024)) != -1) {
        out.write(buffer, 0, length);
    }
于 2012-11-01T04:08:58.903 に答える