WebSocket 服務端未啟動時,客戶端重連報錯
阿新 • • 發佈:2022-04-19
當WebSocket服務端未啟動時,我們在客戶端申請連線,會報 System.Net.Sockets.SocketException 異常。
當然,我們除錯時異常設定預設是不勾選這個的。所以不影響正常除錯。
但小夥伴發現,依然會影響介面卡頓,尤其是書寫效能受影響。
所以,需要確認判斷服務端是否已啟動,再讓客戶端連線服務端,規避掉這個異常。
websocket中沒有這樣屬性,能獲取到服務端啟動的狀態。
看了下webSocket的內部機制,是通過IP+埠TCP進行通訊的。所以可以檢視端口占用情況來判斷:
如上圖中,Listening的2710埠是服務端,下面Established表示和服務端已建立連線的2個客戶端。
也可以用C#判斷埠是否佔用:
1 /// <summary> 2 /// 判斷服務端是否已啟動 3 /// </summary> 4 /// <returns></returns> 5 public static bool CheckServerListening() 6 { 7 var port = ChannelCustomText.Port; 8 IPGlobalProperties ipProperties = IPGlobalProperties.GetIPGlobalProperties();9 IPEndPoint[] ipEndPoints = ipProperties.GetActiveTcpListeners(); 10 foreach (IPEndPoint endPoint in ipEndPoints) 11 { 12 if (endPoint.Port == port) 13 { 14 return true; 15 } 16 } 17 return false; 18 }