問題
クライアントからのデータがすべて送信されていること、およびサーバーが受信しているデータも完全に送信されていることをパケットスニファーで確認しましたが、わずかな問題があります。
以下は、サーバー内のクライアント スレッドの関連部分の基本的な表現です。
this.data_in = new DataInputStream(sock.getInputStream());
this.in = new InputStreamReader(this.data_in);
サーバーは BufferedReader を使用して認証データを読み込み、認証が完了するとソケットからデータを読み込みます。変数「fos」は、DataInputStream データが書き込まれる FileOutputStream です。
int read = 0;
byte[] buffer = new byte[8192];
while((read = data_in.read(buffer)) != -1) {
fos.write(buffer, 0, read);
bytes_received += read;
}
これは概念的にはすべて正しいように見えますが、実際には読み込まれたファイルの最初の 1450 バイトが欠落しています。ストリーム内の位置が奇妙だったが、まだうまくいかなかった場合に備えて、新しい DataInputStream(sock.getInputStream()) を使用してみました。助けてくれてありがとう!
更新 1
そのため、BufferedReader 機能を使用することができました。以前に使用していたように、文字列行を読み取るメソッドを作成しました。以下のコードを参照してください。
int input;
boolean run = true;
while((input = in.read()) != -1 && run) {
run = true;
char[] chars = Character.toChars(input);
for(char c : chars) {
if(c == '\n') {
run = false;
break;
} else if(c != '\r') {
sb.append(c);
}
}
}
素晴らしい解決策のように見えましたが、まだ 1450 バイトの情報が不足しています。多分私はここで間違った方向に進んでいますか?