Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java通过套接字连续检查连接_Java_Sockets_Stream - Fatal编程技术网

Java通过套接字连续检查连接

Java通过套接字连续检查连接,java,sockets,stream,Java,Sockets,Stream,我正在用Java开发一个基于GUI和数据库的多客户端服务器程序。客户端对程序的要求是确保始终存在到服务器的连接,如果连接丢失(服务器停机/套接字或流出现问题),则应通知它 换句话说,我需要一个持续检查与服务器连接的解决方案 最好的方法是什么?实施心跳协议 如果不知道该怎么做,可以使用连接侦听器线程 检查插座连接是否关闭 if(Socket.isClosed()) { //reconnect or alert the user } //end if TCP/IP中没有这样的API。检测T

我正在用Java开发一个基于GUI和数据库的多客户端服务器程序。客户端对程序的要求是确保始终存在到服务器的连接,如果连接丢失(服务器停机/套接字或流出现问题),则应通知它

换句话说,我需要一个持续检查与服务器连接的解决方案


最好的方法是什么?

实施心跳协议

如果不知道该怎么做,可以使用连接侦听器线程
检查插座连接是否关闭

if(Socket.isClosed()) {
    //reconnect or alert the user
} //end if

TCP/IP中没有这样的API。检测TCP连接故障的唯一方法是尝试使用它。您可能会考虑向协议添加心跳,但最好与客户端侧的成员一起查看该需求。TCP/IP在设计上没有“拨号音”,在应用程序级别添加一个拨号音非常简单,容易出错,并且会带来时间和空间开销。

Socket.isComnected()只告诉您是否连接过套接字。它不知道连接状态的任何信息。它告诉您套接字是否已绑定并成功连接…实际上是连接状态,下次阅读引用,然后投票否决!你在猜:我不是。很明显,你从未尝试过。isConnected()不会告诉您连接是否仍然存在,这是问题的主题。您的建议相当于浪费整个线程来测试套接字是否首先连接,这是完全没有意义的。事实上,没有办法实现一个isConnected()方法,该方法的行为与您在这里假设的一样,因为TCP不提供这样的API!下次做测试!isConnected()告诉您是否曾经占用过套接字并建立了连接,用于问题、文档、参考和您的“hwoknowwhat”这是一个(答案)。没有api提供了一个断开连接的方法,可以实现上面提到的问题,所以如果你注意到我的第一个建议是HB协议…如果你真的知道你的套接字,你就会知道如果端点套接字没有接收,send方法会出现异常…这只会告诉你你是否自己关闭了套接字。它没有告诉你连接的情况。显然你还没有试过-1.