2

我会假设调用isConnected()套接字会告诉我是否连接到另一端。

返回: 如果套接字成功连接到服务器,则为 true

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

java.net.SocketException:管道损坏

与有什么isConnected不同isClosed,每个人的真实行为是什么?

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

4

1 回答 1

7

我会假设调用isConnected()套接字会告诉我是否连接到另一端。

错误的。它告诉你是否曾经连接过这个 Socket。它不会告诉您连接的状态。

返回: 如果套接字成功连接到服务器,则为 true

请注意,它没有说“当前已连接”到服务器。

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

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

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

不,没有。如果对等点正常关闭,读取将返回 EOS 指示(read()返回 -1,readLine()返回 null,readXXX()对于任何其他 XXX 抛出EOFException)。根据您的平台,写入将引发IOException“连接重置”或“管道损坏”。TCP 不支持“拨号音”性质的任何内容,因此如果没有挂起的写入,则没有可查询的当前连接状态。

于 2013-04-08T00:45:06.253 回答