0
いつも私はストリームとソケットに問題があります。ここでソケットのInputStream/OutputStreamの奇妙な動作
は私のコードです:私はクライアントコードでSystem.out.println(f.length())
のコメントを解除した場合
file = sc.nextLine();
int fileSize = bitIn.read(); // <- Here is my error!
System.out.println(file + ", " + fileSize);
fileOut = new FileOutputStream(folder + file);
byte buffer[] = new byte[BUFFER_SIZE];
int len;
while (fileSize > 0 && (len = bitIn.read(buffer)) != -1) {
fileOut.write(buffer, 0, len);
fileSize -= len;
System.out.println(fileSize);
}
fileOut.close();
クライアント
bitOut.write((f.getName() + "\n").getBytes());
//System.out.println(f.length()); // <- This is the odd part.
bitOut.write((int) f.length());
bitOut.flush();
fileIn = new FileInputStream(f);
byte buffer[] = new byte[BUFFER_SIZE];
int len;
while ((len = fileIn.read(buffer)) != -1) {
bitOut.write(buffer, 0, len);
}
fileIn.close();
Serverは、サーバーは常に権利を取得しています値はfileSize
です。しかし、私がコメントしたままにしておくと、fileSize
は、多くの場合、f.length()
の後に送信すべきデータからのバイトです。一方で面白いのは、クライアントのファイルサイズを印刷するだけで、サーバー上で正しい結果が得られるからです。一方、私はどのようにそれを修正するための手がかりを持っていません...