Java,增加套接字超时



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

所以我想知道是否有一些默认的套接字超时在windows或Java虚拟机上我可以设置?我不能改变客户端代码,所以setSoTimeout()不是我的选择。

使用Windows XP.

编辑:正如我现在所理解的,套接字连接没有在客户端打开。它是从服务器传递过来的。所以我反编译了所有的服务器jar文件。

默认的套接字超时为0,这意味着永远不会超时。如果它确实在5分钟后超时,则意味着它已在代码中设置。如果源代码不可用,并且没有配置,您可以尝试反编译类,并查找setSoTimeout调用。

既然有注释,而且搜索没有找到任何setSoTimeout()调用,那么您可以采用不同的方法。只要让它超时,并编写一个小脚本,在它超时的情况下重试调用。如果可以从命令行调用客户机,则可以解析输出,如果输出出现错误

在没有任何流量的情况下长时间保持未使用的TCP连接是很重要的。许多防火墙/路由器在超时后关闭未使用的端口。

一个选项可能是实现简单的keepalive协议来发送虚拟数据包,但如果你不能触摸客户端代码,这可能不是一个选项。

编辑:我不知道有任何方法重写setSoTimeout()设置在客户端代码。

回答0是默认超时并不完全正确。例如,Axis2客户机具有默认的60秒超时,因此它将取决于您使用哪种实现来进行调用。

你能提供更多细节吗?很抱歉写在回答部分,但我没有足够的声誉来做评论:)

您需要保持连接存活吗?你为什么不重新考虑一下,让它更异步一些呢?这种模式根本无法扩展。在某一时刻,所有可用的线程都可能等待来自服务器的长时间响应。

相关内容

  • 没有找到相关文章

最新更新