簡體   English   中英

TIME_WAIT中的TCP連接將不允許重新連接,Java

[英]tcp connection in TIME_WAIT won't allow reconnect, java

與服務器建立TCP連接后,我關閉了Linux應用程序,並調用了Socket.close()。

檢查netstat -pant,我看到連接處於TIME_WAIT狀態。

因為使用相同的端口進行連接,所以這阻止了我立即建立與服務器的連接。 相反,我必須等待連接超時到TIME_WAIT狀態,然后才能再次重新連接。

我玩過-沒有運氣-使用套接字方法:set_so_timeout(),set_keepalive(),set_so_linger()和set_reuseaddr()-該方法的確切拼寫在本文中可能不正確。

我的問題是如何使連接脫離TIME_WAIT狀態,以便立即重新建立連接?

請告訴我。

謝謝jbu

使連接脫離TIME_WAIT的最佳方法是(令人驚訝地)等待:-)

這就是TCP / IP的工作方式。 會話由元組(sourceIP, sourcePort, destIP, destPort, protocol)之所以不能重復使用,是因為網絡中某些地方可能仍存在一些數據包。

TIME_WAIT狀態通常是最大數據包壽命的兩倍,因此您應該擺弄它,因為這可能會導致數據包從上一個會話中顯示(這會破壞當前會話)。

理想情況下,您應該從其他源端口進行連接,然后便可以立即打開會話。

您還需要注意的另一件事是嚴重關閉的會話。 我一直都遵循客戶端應該關閉會話(並干凈地關閉它)的准則。 這樣可以最大程度地減少長期閑置的半封閉會議的可能性。

暫無
暫無

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

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