isConnected和isClosed之间的区别

时间:2013-04-08 00:26:05

标签: java sockets

我原以为在套接字上调用isConnected()会告诉我是否连接到另一边。

  

返回:如果套接字成功连接到服务器

,则返回true

但是在检查然后在套接字上调用flush()之后我得到了

  

java.net.SocketException:Broken pipe

isConnectedisClosed有何不同,每个人的真实行为是什么?

如果没有向流写入任何内容或创建新连接,我如何判断对方是否正式关闭?还有办法吗?

1 个答案:

答案 0 :(得分:7)

  

我原以为在套接字上调用isConnected()会告诉我是否连接到另一边。

错误。它会告诉您是否曾连接此套接字。它没有告诉你连接的状态。

  

返回:如果套接字成功连接到服务器

,则返回true

请注意,它并未说'当前已连接到服务器

  

isConnectedisClosed,的不同之处是什么?每个人的真实行为是什么?

两者的真实行为是它们告诉你套接字做了什么,而不是连接的状态。

  

如果没有向流写入任何内容或创建新连接,我如何判断对方是否正式关闭?还有办法吗?

不,没有。如果对等方正常关闭,则读取将返回EOS指示(read()返回-1,readLine()返回null,readXXX()用于任何其他XXX抛出EOFException)。写入将根据您的平台抛出IOException'connect reset'或'broken pipe'。 TCP不支持“拨号音”性质的任何内容,因此如果没有挂起的写入,则无需查询当前的连接状态。