进程间通信WebSocket 服务端未启动时,客户端重连报错

当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     }

 

posted @ 2022-04-19 19:47  唐宋元明清2188  阅读(472)  评论(0编辑  收藏  举报