很久前编过一个基于C#的socket通信小软件,在测试过程中发现当通信客户端关闭或突然断开网络后,服务器端会不停的刷新连接,导致服务器端程序顿卡。
解决的方法很简单,进行 !newSocket.Poll()判断,再加一行线程sleep代码即可。。。。。
服务器端持续监听函数如下:
public void RecevieMsg(object socket)
{
Socket newSocket = socket as Socket;
while (true)
{
if (!newSocket.Poll(100, SelectMode.SelectRead))
{
try
{
Thread.Sleep(10);//此处进行监听线程的Sleep
newSocket.Receive(buffer, buffer.Length, 0);//此处长度为200
System.DateTime mesagetime = System.DateTime.Now;
MSGtime = mesagetime.ToString("yyyy/MM/dd/HH:mm:ss");
ReceiveMsg = System.Text.Encoding.UTF8.GetString(buffer);
。。。。。。。。。//此处省略剩余无关代码
}
catch (Exception ex)
{
}
else
{
Thread.Sleep(10); //此处进行监听线程的Sleep
}
}
}
完美解决