我正在使用Java來實現多線程TCP服務器 - 客戶端應用程序。但是現在我遇到了一個奇怪的問題:當我關閉服務器套接字時,接收器仍然可以連續接收最後發送的數據包。由於套接字讀取的細節是內核問題,我無法弄清楚原因。任何人都可以提供一些指導方針嗎? 在此先感謝! 編輯: 所涉及的代碼很簡單:爲什麼TCP接收器可以在Socket服務器關閉後接收數據?
public void run() {
while(runFlag) {
//in = socket.getSocketInputStream();
//byte[] buffer = new byte[bufferSize];
try {
in.read(buffer);
//process the buffer;
}catch(IOException e) {
//
}
}
}
當關閉服務器套接字,該讀操作將持續地接收分組(每次進入while循環)。
如果數據已經在* sender's *套接字緩衝區中,它仍然會在FIN之前發送。 – EJP 2010-12-02 06:20:45
'FIN'的含義是什麼? – 2010-12-02 08:44:13
它是一個*單個位*,表示這是此連接的最終數據包。 – EJP 2010-12-02 11:07:19