我遇到的情况是,Java程序与服务器建立了长期运行的TCP / IP连接,并且该连接的功能与文档中所述的完全相同,除了我无法控制的环境中的一件事。
该服务器会在每个星期六重新启动,但是由于某种原因,该信息无法正确传达给我的客户端,因此连接会一直挂起,永远等待响应。这与过时的JDBC连接完全相同,在服务器和客户端之间的某些路由器发现该连接处于空闲状态,并在没有通知的情况下将其丢弃。
我需要能够重现这种情况才能创建适当的修复程序。
因此,我需要知道是否有一种很好的方法来模拟路由器在我的控制下以静默方式断开连接?
我可以在开发环境和服务器之间放置一个Linux盒子或一个Mac。如果可以在虚拟机中运行JVM,则可以在其中运行JVM。
建议非常欢迎。
EDIT 2012-12-18:对我有用的解决方案是在本地使用基于Java的SOCKS5-proxy,可以随意使用Ctrl-
Z挂起它,并告诉我的应用程序通过它。
如果需要,即使在同一台计算机上,也可以使用Socat转发连接(将其设置为TCP转发器/代理非常容易)(通过引入新端口以使代理进行操作并将其指向“官方”端点)
查看简单的TCP转发器示例
然后,当您要测试中断时,可以杀死它(套接字将被关闭),也可以尝试停止该进程(CTRL Z linux),以查看目标如何处理停止的连接。
任何问题?我会尽力回答…祝您好运!
当我再次调用时,第二次调用将按预期返回。但我想明白,为什么第一次打电话成功了?我是否遗漏了某些特定于TCP的细节?这种奇怪的(对我来说)行为只针对{活动,错误}连接。
我正在编写一个使用tcp套接字的服务器/客户端应用程序,我的问题是如何检测半开放连接,我计划使用keep-alive但有些人建议我做我自己的协议,所以我现在的计划是: 在服务器端: 服务器会等待10秒等待客户端发送数据,如果在给定的时间内服务器没有收到客户端的消息,服务器会将客户端标记为断开连接,否则,如果服务器收到客户端的消息,则会重新设置计时器。 我现在的问题是,这样行吗?还是我做错了?还是一
我正在使用C#window应用程序表单对TCP多线程服务器进行工作,我正在尝试检测客户端的机器是否关闭并断开与服务器的连接。看了一些帖子,有了一些想法: 如何确定tcp是否连接? 我的代码如下: 多谢帮忙。
我试图创建一个客户机,该客户机可以使用SSE(服务器发送的事件)从服务器接收事件,我使用OkHttp3和OkHttp3-sse库(com.squareup.OkHttp3:OKHTTP:4.1.0&com.squareup.OkHttp3:OKHTTP-SSE:4.1.0)来实现这一点。我可以连接到服务器并接收事件,但在某个时候,我想断开客户端并关闭我的应用程序。这就是问题所在。连接被关闭,但应用
下面是我到目前为止的代码: 有人能解释一下在和情况下我该做什么吗?以及如何知道网络已断开并重新连接?
问题内容: StackExchange.Redis的“ 基本用法”文档解释说,该方法是长期存在的,有望重新使用。 但是,当与服务器的连接断开时该怎么办?是否自动重新连接,或者是否有必要像此答案一样编写代码(引用该答案): 上面的代码是处理断开连接恢复的好方法,还是实际上会导致多个实例?同样,该属性应如何解释? [另外:我相信上面的代码是惰性初始化的一种非常糟糕的形式,尤其是在多线程环境中-请参阅