Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.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 TCP连接在连接短时间中断后被拒绝_Java_Sockets_Networking_Tcp - Fatal编程技术网

Java TCP连接在连接短时间中断后被拒绝

Java TCP连接在连接短时间中断后被拒绝,java,sockets,networking,tcp,Java,Sockets,Networking,Tcp,我正在使用(Java)TCP套接字连接到启用网络的设备 考虑以下场景: 1) TCP套接字连接已成功创建 2) 网络连接短时间中断(我只是通过拔下网络电缆来测试) 3) 我的程序关闭套接字 4) 套接字的另一侧只响应来自我方的请求;因此,连接另一端的插座不一定检测到断开的连接 5) 重新建立网络连接 6) 我的程序尝试再次打开套接字 7) ->获取SocketException:连接被拒绝 为什么? 因为另一端的套接字认为tcp连接仍然打开,因此拒绝同一端口上的任何其他连接请求 接下来会发生什么

我正在使用(Java)TCP套接字连接到启用网络的设备

考虑以下场景:

1) TCP套接字连接已成功创建

2) 网络连接短时间中断(我只是通过拔下网络电缆来测试)

3) 我的程序关闭套接字

4) 套接字的另一侧只响应来自我方的请求;因此,连接另一端的插座不一定检测到断开的连接

5) 重新建立网络连接

6) 我的程序尝试再次打开套接字

7) ->获取
SocketException:连接被拒绝

为什么?

因为另一端的套接字认为tcp连接仍然打开,因此拒绝同一端口上的任何其他连接请求

接下来会发生什么

大约5分钟后,我的程序能够再次打开套接字,因为另一端检测到连接不再处于活动状态

问题:


有没有办法缩短我重新连接的时间?我无法在“其他”站点上进行任何更改,也就是说,我无法更改启用网络的设备的tcp连接处理。

如果无法更改另一端的tcp连接处理方式,不幸的是,在这种情况下,您无能为力。这是一个与Java套接字有关的问题。

如果您不能更改“另一端”,我不喜欢您的机会。如果有人回答这个问题,尽管这应该很有趣。@Gagandeep-Bali:根据Javadoc,SocketTimeout仅用于从套接字读取数据:@Gagandeep-Bali:我不认为SO_LINGER会如何帮助通知另一方连接断开。谢谢你的回答。你说这是Java套接字的一个常见问题,例如unix套接字有解决方案吗?@mort我怀疑这个问题在一般unix套接字中并不明显,但我不知道这将如何应用到你的场景中(不知道其他设备是什么,如何处理套接字等)。@mort在这种情况下的“解决方法”(特别是现在的Java套接字),尝试对其进行写入,如果/当引发异常时,您知道套接字连接已关闭。由于您无权在另一端更改此内容,我不确定您能做些什么。关于解决方法:这是我在连接的另一端已经在做的事。我想应该有某种方法告诉“另一端”检测套接字连接是否断开。这不是什么大问题,因为另一方最终会检测到套接字连接断开。我只是想知道是否有一种简单的方法可以做到这一点。因为似乎没有,我接受你的答案。感谢你的努力!