2013-04-12 19 views
1

我得到了下面的Java代码:检测服务器端的FIN数据包

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

假设我不使用插座,我需要检测服务器端连接关闭(FINRST包)作为一旦它发生了。
举例来说,虽然它检查套接字状态,或者拦截FIN/RST包线程...

我如何检测呢?
我试过printWriter.checkError(),socket.isConnected(),socket.isClosed()方法,但没有任何工作。

回答

3

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

至于其他功能方面去,s.isConnected()告诉您是否成功已经connect()编插座,并s.isClosed()会告诉你是否关闭它。它不会告诉你对方已经做了什么。

+0

除了“是唯一可以这样做的阅读”之外,第一段是正确的。其余的不太好:大部分情况会略好一些。后续的读取不会抛出异常,它们将继续返回-1。如果关闭了套接字,isClosed()将返回true,否则返回true。 – EJP

+0

@EJP:就像我说过的......这是一段时间,因为我不得不担心它。 :P编辑。 – cHao