【发布时间】:2010-11-23 00:11:36
【问题描述】:
我们有一个 Java 客户端,它保持与远程服务器的持久套接字连接。客户端每 15 秒轮询一次 DB 表,如果有新项目,则将其序列化并将其写入套接字。
在写入输出流之前,我想检查套接字连接是否仍然良好。对于特定的应用程序逻辑,进行这种主动检查比捕获异常并响应式重新连接更简单。
我使用以下代码找出了连接断开时哪种方法可以让我知道:
LOG.debug("Socket status: bound=" + _socket.isBound() + ", closed=" + _socket.isClosed() + ", connected=" + _socket.isConnected() + ", outputShutdown=" + _socket.isOutputShutdown() + ", inputShutdown=" + _socket.isOutputShutdown());
我暂时禁用了我的网络适配器,并且在下一次轮询期间,正如预期的那样,写入套接字时出现异常。
但是,调试语句打印了以下内容:
"Socket status: bound=true, closed=false, connected=true, outputShutdown=false, inputShutdown=false"
我希望关闭为真或连接为假。我得到的实际值似乎是谎言。
有没有办法可靠地检查套接字的连接状态?
【问题讨论】:
-
不确定它是否与问题有关,但在示例代码中您检查了两次
isOutputShutdown()而根本没有检查isInputShutdown() -
它们不是谎言,你只是误解了它们。
标签: java sockets network-programming