簡體   English   中英

Java Socket:為什么套接字沒有“寫超時”

[英]Java Socket:why is there is no “write timeout” for the socket

有傳遞給connect方法的連接超時值,有使用setSoTimeout方法設置的讀取超時值。 我想知道為什么沒有設置“寫入超時”的方法? 我認為TCP協議中有寫超時的概念。

不會有多大用處。

通常,TCP 發送與應用程序是異步的。 send()所做的只是將數據放入套接字發送緩沖區。 然后它返回,同時發送緩沖區被異步清空到網絡。 所以沒有什么可以超時的。 並且沒有超時並不表示數據已發送到對等方。

send()在發送緩沖區已滿時阻塞並且可以在其上實現超時,實際上您可以使用select()在非阻塞模式下自己做到這一點,但問題是超時可能是當前發送或前一個發送。 因此,提供超時會相當混亂。 相反,當所有 TCP 發送計時器在內部超時時傳遞的是連接重置。

我認為TCP協議中有寫超時的概念。

確實有,但那是在 TCP 異步清空套接字發送緩沖區的級別。 它不受應用程序控制。

您可以先嘗試連接...如果連接失敗捕獲異常

InetSocketAddress sockAdr = new InetSocketAddress(serveradres, 2222);
Socket newsok = new Socket();
int timeout = 2000;
newsok.connect(sockAdr, timeout);

暫無
暫無

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

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