2013-04-13 91 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