2013-04-24 30 views
1

我有在vb.net開發的聊天應用程序。它用於在辦公室內的LAN網絡中連接的PC之間進行聊天。它使用TCP/IP端口25025連接到另一個。該應用程序工作正常。但在某些情況下,接收者不會收到聊天消息。TCP端口狀態檢查應用程序。

因此,我只是運行該電腦netstat -an命令,並找到這麼多的TCP端口及其狀態。下面是它的一部分(錯誤案例)。我只顯示了25025行。

Proto Local Address   Foreign Address  State 
TCP 0.0.0.0:25025   0.0.0.0:0    LISTENING 
TCP 192.168.1.79:25025  192.168.1.60:1320  TIME_WAIT 
TCP 192.168.1.79:25025  192.168.1.60:1321  TIME_WAIT 
TCP 192.168.1.79:58508  192.168.1.60:25025  TIME_WAIT 
TCP 192.168.1.79:58509  192.168.1.60:25025  TIME_WAIT 
TCP 192.168.1.79:58510  192.168.1.60:25025  TIME_WAIT 
TCP 192.168.1.79:58511  192.168.1.60:25025  ESTABLISHED 

然後,我檢查了同樣的命令,我沒有得到任何錯誤與我的應用程序(適當的工作我的應用程序)。輸出是,

TCP 192.168.1.60:25025  192.168.1.79:58511  ESTABLISHED 

那麼我該如何解決它呢? 25025這麼多港口表明什麼?在錯誤情況下,我有很多25025端口如上所示。所以請幫助我理解並解決問題。

回答

0

檢查bind()調用是否成功。我的猜測是,當您的應用程序綁定到偵聽端口時,它會失敗,並顯示錯誤「地址已在使用中」。 netstat輸出中的TIME_WAIT行建議這樣。但我猜你的應用程序沒有檢查bind()的返回值,而是盲目繼續假設調用成功。這將解釋爲什麼它從不接收任何東西。

如果套接字尚未從先前的應用程序調用中完成關閉,則會得到「地址已在使用中」。通常情況下,套接字在被應用程序關閉後需要大約4分鐘的時間才能重新使用,同時狀態爲TIME_WAIT。

您可以使用SO_REUSEADDR套接字選項來避免此TIME_WAIT時間段。