我有以下Java代码:
Socket s = new Socket();
s.connect(mySockAddr, myTimeout);
假设我没有使用套接字,我需要在发生时立即检测到服务器端连接关闭(FIN
或RST
数据包)。
例如,虽然是一个检查套接字状态或拦截FIN
/ RST
数据包的线程......
我如何检测它?
我尝试使用printWriter.checkError()
,socket.isConnected()
,socket.isClosed()
方法,但没有任何效果。
答案 0 :(得分:3)
我知道检测对方是否已关闭连接的唯一方法是尝试从输入流中读取。从关闭套接字读取将返回-1。这是你的通知,不再有任何阅读。
就其他功能而言,s.isConnected()
会告诉您是否已成功connect()
编辑套接字,而s.isClosed()
会告诉您您是否关闭它。它没有告诉你对方做了什么。