一尘不染

如何重现静默断开的TCP / IP连接?

java

我遇到的情况是,Java程序与服务器建立了长期运行的TCP / IP连接,并且该连接的功能与文档中所述的完全相同,除了我无法控制的环境中的一件事。

该服务器会在每个星期六重新启动,但是由于某种原因,该信息无法正确传达给我的客户端,因此连接会一直挂起,永远等待响应。这与过时的JDBC连接完全相同,在服务器和客户端之间的某些路由器发现该连接处于空闲状态,并在没有通知的情况下将其丢弃。

我需要能够重现这种情况才能创建适当的修复程序。

因此,我需要知道是否有一种很好的方法来模拟路由器在我的控制下以静默方式断开连接?

我可以在开发环境和服务器之间放置一个Linux盒子或一个Mac。如果可以在虚拟机中运行JVM,则可以在其中运行JVM。

建议非常欢迎。


EDIT 2012-12-18:对我有用的解决方案是在本地使用基于Java的SOCKS5-proxy,可以随意使用Ctrl-
Z挂起它,并告诉我的应用程序通过它。


阅读 263

收藏
2020-12-03

共1个答案

一尘不染

如果需要,即使在同一台计算机上,也可以使用Socat转发连接(将其设置为TCP转发器/代理非常容易)(通过引入新端口以使代理进行操作并将其指向“官方”端点)

查看简单的TCP转发器示例

然后,当您要测试中断时,可以杀死它(套接字将被关闭),也可以尝试停止该进程(CTRL Z linux),以查看目标如何处理停止的连接。

任何问题?我会尽力回答…祝您好运!

2020-12-03