检测服务器端FIN数据包

时间:2013-04-12 15:38:35

标签: java tcp

我有以下Java代码:

Socket s = new Socket();
s.connect(mySockAddr, myTimeout);

假设我没有使用套接字,我需要在发生时立即检测到服务器端连接关闭(FINRST数据包)。 例如,虽然是一个检查套接字状态或拦截FIN / RST数据包的线程......

我如何检测它?
我尝试使用printWriter.checkError()socket.isConnected()socket.isClosed()方法,但没有任何效果。

1 个答案:

答案 0 :(得分:3)

我知道检测对方是否已关闭连接的唯一方法是尝试从输入流中读取。从关闭套接字读取将返回-1。这是你的通知,不再有任何阅读。

就其他功能而言,s.isConnected()会告诉您是否已成功connect()编辑套接字,而s.isClosed()会告诉您您是否关闭它。它没有告诉你对方做了什么。