Java Socket类关于连接状态

aki*_*adu 0 java sockets network-programming

我们有一个Java客户端,可以保持对远程服务器的持久套接字连接.客户端每15秒轮询一次DB表,如果有新项,则将其序列化并将其写入套接字.

在写入输出流之前,我想检查套接字连接是否仍然良好.对于特定的应用程序逻辑,执行此主动检查比捕获异常和重新连接更为简单.

我使用下面的代码弄清楚当连接断开时哪种方法可以让我知道:

LOG.debug("Socket status: bound=" + _socket.isBound() + ", closed=" + _socket.isClosed() + ", connected=" + _socket.isConnected() + ", outputShutdown=" + _socket.isOutputShutdown() + ", inputShutdown=" + _socket.isOutputShutdown());
Run Code Online (Sandbox Code Playgroud)

我暂时禁用了我的网络适配器,并在下次轮询期间,正如预期的那样,写入套接字时出现异常.

但是,debug语句打印了以下内容:

"Socket status: bound=true, closed=false, connected=true, outputShutdown=false, inputShutdown=false"
Run Code Online (Sandbox Code Playgroud)

我希望关闭是真实的或连接是假的.我得到的实际价值似乎是一个谎言.

有没有办法可靠地检查套接字的连接状态?

Jam*_*olk 6

仔细阅读Socket类Javadoc.

如果套接字能够连接,则isConnected为true.方法名称用词不当,如果是hasConnected则更准确.

一旦套接字成功连接,它就变为真实并保持正确.同样的事情是isBound.您必须尝试套接字操作并检查是否有故障.