0

カスタムプロトコルを書いています。コマンド名を入力すると、コードは次のようになります。

if(commandString.equals("PUT")){
    File f = new File(currentFolder, "test.txt");
    if(!f.exists())
         f.createNewFile();
    FileOutputStream fout = new FileOutputStream(f);
    long size = 150;
    long count = 0;
    int bufferLeng = 0;
    byte[] buffer = new byte[512];
    while((bufferLeng = dis.read(buffer))>0) //dis is a data input stream.
    {
        count =+ bufferLeng;
        fout.write(buffer);
    }
    System.out.println("All Good");
    fout.flush();
    fout.close();

}

このコマンドは、次のようにクライアントによってサーバーに送信されますpWriter.println("PUT");。これを実行すると、ファイルtest.txtが作成されますが、フリーズし、サーバーにすべてのメッセージが表示されません。これはなぜですか?また、簡単な修正方法は何ですか?

サーバーとクライアントが動作します!!

ありがとうございました

4

2 に答える 2

1

サーバーは、クライアントがソケットを閉じるのを待ちます。これにより、ファイルの終わりが送信され、dis.read()-1 が返されます。

通常、これはあなたが望むものではありません。解決策は、データの前にファイル サイズを送信し、正確にこの量のデータを読み取ることです。

socket.flush()ファイル データの最後のバイトを書き込んだ後にクライアントが呼び出しを行っていることを確認してください。そうしないと、サーバーがハングする原因にもなるバッファ内でデータがスタックする可能性があります。

于 2013-09-16T14:56:43.877 に答える