サーバーから大きなファイルを分割して送信しようとすると、一部のパッケージがクライアントに到着しません...コンソール出力でわかるように
http://s7.postimg.org/94yjfame3/error.png
クライアントは 19799.. バイトしか受信せず、サーバーは 62800.. バイトを送信しました。
コードは長すぎてここでは説明できません... しかし、基本は次のとおりです。
// server side -> send data
BufferedOutputStream out = new BufferedOutputStream(socket.getOutputStream());
byte[] somePackageInfo= new byte[500];
byte[] streamOut = new byte[20000];
while(getDataFromLargeFile(somePackageInfo,streamOut) != 0) {
out.write(somePackageInfo,0,500);
out.write(streamOut);
out.flush();
}
out.write(0);
out.flush();
// client side -> get data
BufferedInputStream in = new BufferedInputStream(socket.getInputStream());
byte[] somePackageInfo= new byte[500];
byte[] streamIn= new byte[20000];
while(true) {
if(in.read(somePackageInfo,0,500) == 0) break;
in.read(streamIn);
saveDataToLargeFile(somePackageInfo,streamIn);
}
転送を遅くしようとしましたが ( )、ほとんどの荷物sleep(500)
しか届きませんでした。
を削除しようとしましたflush()
が、まだほとんどのパッケージしか到着しませんでした。
この問題の原因は何ですか?どうすれば修正できますか?