0

ファイルを受け入れ、DataInputStreamとBufferedInputStreamを使用して特定のディレクトリに書き込むサーバーを作成しようとしています。

サーバーは'ユーザー名(文字列)''ファイル数(int)''ファイル名(文字列)''各ファイルのサイズ(long)'および'解釈されないファイルの内容bytes(byte [])'を取得します

そして、すべてが成功した場合、私はブール値を送信することになっています。

しかし、問題は、ファイルを正しく受信していないことです。

時々、「壊れたパイプ」エラーメッセージが表示されたり、受信後にファイルが破損したりします。

問題を修正しました。

4

2 に答える 2

3

あなたの問題に関連しているかもしれない小さなこと。読み取りが要求されたバイト数ではなく、実際に読み取られたバイト数でファイルサイズ変数を減らす必要があります。

       while(fileSize>0){
            if(fileSize < byteSize)
                byteSize = (int)fileSize;
            int byteRead = din.read(b, 0, byteSize);
            fos.write(b);
            fileSize -= byteRead; // <-- See here
        }
于 2011-10-07T14:36:18.770 に答える
0

入力を読み取るときに送信者が接続を閉じた場合、このエラーが発生する可能性があります。おそらくあなたのコードとは何の関係もありません。送信者がタイムアウトしたか、転送が完了する前に接続を閉じたなど、さまざまな原因が考えられます。

この関連する質問を見てください: How to fix java.net.SocketException: Broken pipe?

于 2011-10-07T14:36:57.180 に答える