2013-04-13 143 views
0

在我創建了一個套接字並建立了一個連接之後,我使用BufferedReader和PrintWriter來寫入/讀取套接字。Java socket TCP teardown

Socket s = new Socket(ip, port); 
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream())); 
PrintWriter out = new PrintWriter(s.getOutputStream()); 

當我完成使用套接字我關閉它。

s.close(); 

這將導致TCP fin被髮送並保留半開TCP連接。有什麼方法可以檢測客戶端/服務器是否關閉了連接的結束?

+0

看看這[問題](http://stackoverflow.com/questions/155243/why-is-it-impossible-without-attempting-io-to-detect-that-tcp-socket-was- grac)它應該用相當多的信息來回答你的問題。 – Carlo

回答

1

這將導致TCP fin被髮送,並保留半開TCP連接。

不完全。它會留下一個半開放的TCP連接,如果它接收到更多數據,將會發出重置。

有什麼辦法可以檢測客戶端/服務器是否關閉了連接的結束?

如果您已經關閉了您的電話,則不需要。如果您剛剛發出寫入關機,您可以閱讀,直到EOS,它會告訴您關於對方關閉,然後關閉套接字。除非你真的需要同時關閉,否則沒什麼意義。

+0

檢測連接的一端是否已關閉的最佳方法是什麼?是否在通知其他客戶的應用程序中實現了某些內容? – Carlj901

+0

閱讀EOS告訴你。 – EJP