我会假设调用isConnected()
套接字会告诉我是否连接到另一端。
返回: 如果套接字成功连接到服务器,则为 true
但是在检查然后调用flush()
套接字之后我得到了
java.net.SocketException:管道损坏
与有什么isConnected
不同isClosed
,每个人的真实行为是什么?
如果没有向流中写入任何内容或创建新连接,我如何判断对方是否正式关闭?有没有办法?
我会假设调用
isConnected()
套接字会告诉我是否连接到另一端。
错误的。它告诉你是否曾经连接过这个 Socket。它不会告诉您连接的状态。
返回: 如果套接字成功连接到服务器,则为 true
请注意,它没有说“当前已连接”到服务器。
有什么
isConnected
不同isClosed,
,每个人的真实行为是什么?
两者的真正行为是它们告诉您您对套接字做了什么,而不是连接的状态。
如果没有向流中写入任何内容或创建新连接,我如何判断对方是否正式关闭?有没有办法?
不,没有。如果对等点正常关闭,读取将返回 EOS 指示(read()
返回 -1,readLine()
返回 null,readXXX()
对于任何其他 XXX 抛出EOFException
)。根据您的平台,写入将引发IOException
“连接重置”或“管道损坏”。TCP 不支持“拨号音”性质的任何内容,因此如果没有挂起的写入,则没有可查询的当前连接状态。