[解決]通常每個套接字地址只允許使用一次


我們在做socket的開發的時候,經常會遇到這個錯誤:通常每個套接字地址 (協議/網絡地址/端口)只允許使用一次

錯誤指示很明確:通信端口被占用了,導致通信無法進行。

但為什么端口被占用了呢?什么端口被占用了?

這里其實有一個大前提:你的程序中有沒有指定socket通信端口?

如果指定了,解決辦法很簡單,每次通信完成手動釋放就行了。下次通信重新建立連接。

如果沒有指定,說明以下幾點(可能你命中的是其中一點):

1、你的服務器開啟的端口數太少;

2、連接釋放等待時間太長;

3、你的socket通信並發量太大。

以上幾點導致你服務器端口被占滿,下次通信無空閑端口可用,程序就拋出了“通常每個套接字地址 (協議/網絡地址/端口)只允許使用一次”的異常。


原因找到了,解決起來也就簡單了,針對1、2兩點,我們修改服務器配置就行了。

如果你的服務器是windows2003或xp,默認端口只開到5000,而且超時等待默認是240秒(這里有官方說明:http://msdn.microsoft.com/zh-cn/library/aa560610(v=bts.10).aspx),我們只需把服務器端口全打開,並且根據自己的情況調整超時時間。

具體操作:

1、打開注冊表(運行命令:regedit)

2、找到注冊表節點:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

3、新增2項(如果已存在就修改項值),值對應的都是10進制數字

MaxUserPort=65534 (端口數設到最大)

TcpTimedWaitDelay=5 (超時等待是5秒,根據個人需要)

4、重啟服務器


搞定!


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM