我原以为在套接字上调用isConnected()
会告诉我是否连接到另一边。
返回:如果套接字成功连接到服务器
,则返回true
但是在检查然后在套接字上调用flush()
之后我得到了
java.net.SocketException:Broken pipe
isConnected
与isClosed
有何不同,每个人的真实行为是什么?
如果没有向流写入任何内容或创建新连接,我如何判断对方是否正式关闭?还有办法吗?
答案 0 :(得分:7)
我原以为在套接字上调用
isConnected()
会告诉我是否连接到另一边。
错误。它会告诉您你是否曾连接此套接字。它没有告诉你连接的状态。
返回:如果套接字成功连接到服务器
,则返回true
请注意,它并未说'当前已连接到服务器。
isConnected
与isClosed,
的不同之处是什么?每个人的真实行为是什么?
两者的真实行为是它们告诉你你对套接字做了什么,而不是连接的状态。
如果没有向流写入任何内容或创建新连接,我如何判断对方是否正式关闭?还有办法吗?
不,没有。如果对等方正常关闭,则读取将返回EOS指示(read()
返回-1,readLine()
返回null,readXXX()
用于任何其他XXX抛出EOFException
)。写入将根据您的平台抛出IOException
'connect reset'或'broken pipe'。 TCP不支持“拨号音”性质的任何内容,因此如果没有挂起的写入,则无需查询当前的连接状态。