Java,增加套接字超时

hs2*_*s2d 11 java sockets timeout

我有一个简单的服务器客户端应用程 一切正常,但在某个阶段,从服务器获取响应需要5分钟以上(这是正常的,它需要像这样).问题是如果需要超过5分钟,我会一直得到这个例外:java.net.SocketTimeoutException: Read timed out.

所以我想知道在Windows或我可以设置的Java虚拟机上是否存在默认套接字超时?我无法更改客户端代码,因此setSoTimeout()不适合我.

使用Windows XP ..

编辑:据我所知,现在是在客户端没有打开套接字连接.它从服务器传递.所以我反编译了服务器jar文件.但仍无法找到有关超时的任何信息.

sti*_*vlo 10

默认套接字超时为0,表示永不超时.如果它在5分钟后实际超时,则表示它已在代码中设置.如果源不可用,并且没有配置,您可以尝试反编译该类,并查找setSoTimeout调用.

由于注释以及搜索未找到任何setSoTimeout()调用的事实,您可以采用不同的方法.只是让它超时,然后编写一个小脚本,它将重试该调用,以防万一.如果可以从命令行调用客户端,则可以解析输出,如果它在stderr上运行.


Lyc*_*cha 8

在没有任何流量的情况下长时间保持未使用的TCP连接并不是那么简单.一些超时后,许多防火墙/路由器关闭未使用的端口.

一种选择可能是实现简单的keepalive协议,偶尔发送虚拟包,但如果你不能触摸客户端代码,这可能不是一个选项.

编辑:我不知道有任何方法来覆盖客户端代码中设置的setSoTimeout().