Windows 建立許多socket並連接,達到一定數目(不足2000)時,發生超時錯誤,是怎麼解決?

我自己在Windows寫了一個client,不斷建立新socket去連接伺服器的一個埠,但是建立了1700多個左右時,新建的socket連接伺服器時返回超時錯誤,為了排除是服務端的原因,我在兩台Windows上同時運行client,伺服器可以接收到3400多個連接,即每台Windows1700左右。然後網上找資料,Windows 下單機最大TCP連接數_Hailin_新浪博客按照這裡的方法嘗試了,沒有解決問題,使用了iKende lib去連接百度時,也是不到2000個連接就超時了。對了,我的兩台Windows電腦都是一樣的現象,一台Windows7,一台Windows10


換Linux。


換Windows Server。Desktop版Windows的唯一優點是打遊戲


應該是你自己程序問題,檢查下錯誤碼吧。

左側是我的本機(Win7系統)作為PingPong測試的客戶端,右側是區域網內的一台CentOS。

5000鏈接。


Win7下我用單個進程跑壓力測試,開過9000個埠連伺服器.還處理一些遊戲邏輯,並沒有什麼問題.

服務端也測過,WinServer2008.一個網關接受3000個埠.開了3個網關,沒有什麼問題.

Linux服務端也測過.CentOS7.同上.一個網關接受3000個埠.開了3個網關.也沒什麼問題(ulimit -n沒問題的話)

綜上所述.估計你是程序問題.


確定不是伺服器的問題?你如果發起Connect的速度大於服務端Accept的速度的話,有可能服務端的backlog不夠大,導致client端無法連接成功哦~,建議每發起一個Client然後sleep一下再發下一個Client,反正windows肯定不止只能建立1000多個TCPClient的,親測


應該是內存限制的原因


推薦閱讀:

TAG:System | Socket | 網路編程 |