簡體   English   中英

Java:套接字讀取超時異常

[英]Java: socket read time out exception

我試圖打電話給一個非常重的過程。 它的平均工作時間估計為9-10分鍾。

當我執行該過程時,我將超時設置為一個非常龐大的數字:99999999。

2分鍾后,我收到以下錯誤:

java.net.SocketTimeoutException:讀取超時

我試圖把它弄得更糟,我把超時設置為3000,並且在預期的3秒后我得到了同樣的錯誤。

您是否知道為什么socket.setSoTimeout(99999999)將其設置為最大120000?

我有同樣的問題,解決方案是不使用socket.shutdownInput(); socket.shutDownOutput(); socket.shutdownInput(); socket.shutDownOutput(); 直到最后一次讀取或寫入數據到套接字。 這使得套接字進入FIN_WAIT狀態,因此在關閉前等待2分鍾。 您可以在這篇文章中閱讀更多相關信息

顯然,您沒有設置您認為正在設置的超時,或者其他人正在更改它。 你必須發布一些代碼才能得到進一步的闡述。

請注意,根據WR Stevens在TCP / IP Illustrated,第二卷,#17.4中的說法,超時保持為1000Hz刻度的短暫,因此超時不能超過11分鍾。 這適用於BSD代碼。

我不確定您的應用程序是如何工作的,但嘗試為套接字設置無限超時

 public void setSoTimeout(int timeout) throws SocketException 

使用指定的超時啟用/禁用SO_TIMEOUT ,以毫秒為單位。 如果將此選項設置為非零超時,則與此Socket關聯的InputStream上的read()調用將僅阻止這段時間。 如果超時到期,則引發java.net.SocketTimeoutException ,盡管Socket仍然有效。 必須在進入阻止操作之前啟用該選項才能生效。 超時必須> 0 超時為零被解釋為無限超時。

如果您提供有關通話的更多信息,我可以改進答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM