我试图调用一个非常繁重的进程。它的平均工作时间估计为9-10分钟。
当我执行这个过程时,我为一个大得离谱的数字设置了超时:99999999。
2分钟后,我得到以下错误:
java.net.SocketTimeoutException:读取超时
我试着再搞一些,我把超时设置为3000,不出所料,3秒后我也出现了同样的错误。
你知道socket.setSoTimeout(99999999)
为什么将其设置为最大120000吗?
我遇到了同样的问题,解决方案没有使用CCD_ 2,直到最后一次向套接字读取或写入数据为止。这使得套接字进入FIN_WAIT状态,因此在关闭之前等待2分钟。您可以在这篇文章中阅读更多关于的信息
很明显,您没有设置您认为要设置的超时,或者其他人随后正在更改它。你必须发布一些代码才能得到进一步的解释。
请注意,根据W.R.Stevens在TCP/IP Illustrated,Vol II,#17.4中的说法,超时时间很短,为1000Hz,因此超过11分钟的超时是不可能的。这适用于BSD代码。
我不确定您的应用程序是如何工作的,但请尝试为套接字设置无限超时
public void setSoTimeout(int timeout) throws SocketException
使用指定的超时(以毫秒为单位)启用/禁用
SO_TIMEOUT
。如果此选项设置为非零超时,则与此套接字关联的InputStream
上的read()
调用将仅阻塞此时间量。如果超时到期,则会引发java.net.SocketTimeoutException
,尽管套接字仍然有效。必须在进入阻止操作之前启用该选项才能生效。超时值必须为> 0
。超时为零被解释为无限超时。
如果你提供更多关于你的电话的信息,我可能会改进答案。