私は、Javaを使用してマルチスレッドのTCPサーバ - クライアントアプリケーションを実装しています。しかし、今私は奇妙な問題に遭遇しました。サーバーソケットをシャットダウンすると、受信者は最後に送信されたパケットを引き続き受信できます。ソケット読み込みの詳細はカーネルの関心事なので、私はその理由を理解することはできません。誰か指針を与えることはできますか? ありがとうございます! 編集:関与 コードは単純である:ソケットサーバーがシャットダウンした後にTCP受信者がデータを受信できる理由
public void run() {
while(runFlag) {
//in = socket.getSocketInputStream();
//byte[] buffer = new byte[bufferSize];
try {
in.read(buffer);
//process the buffer;
}catch(IOException e) {
//
}
}
}
シャットダウンサーバーソケットは、この読み出し動作は、(各時間whileループに入る)を連続的にパケットを受信する場合。
データがすでに*送信側の*ソケットバッファに入っている場合、データはまだFINより先に送信されます。 – EJP
「FIN」の意味は何ですか? –
これがこの接続の最終パケットであることを示す*単一ビット*です。 – EJP