很久前编过一个基于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
}
}
}
完美解决

本文介绍了一种在C#中优化Socket通信服务器端程序的方法,通过使用!newSocket.Poll()判断和线程sleep,解决了客户端断开后服务器端程序顿卡的问题。
1121

被折叠的 条评论
为什么被折叠?



