Socket服务端可能有一些长期连接的Socket客户端,并且长期不发送数据到服务端,这样很浪费服务端资源。下面代码是服务端主动断开无用的Socket客户端
///
/// 接收客户端发来的信息
///
static void ServerRecMsg(object socketClientPara)
{
Socket socketServer = socketClientPara as Socket;
//设置 5秒种超时
socketServer.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 5000);
int firstReceived = 0;
byte[] buffer = new byte[8192];
while (true)
{
try
{
//获取接收的数据,并存入内存缓冲区 返回一个字节数组的长度
if (socketServer != null)
{
firstReceived = socketServer.Receive(buffer);
}
//接受到的长度大于0 说明有信息或文件传来,有些客户端 发送0个字节 代表断开
if (firstReceived > 0)
{
byte[] result = buffer.Take(firstReceived).ToArray();
Console.WriteLine(BitConverter.ToString(result));
}
else
{
break;
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
socketServer.Close();//关闭socket连接
break;
}
}
}
有的客户端一直发送数据到Socket服务端,但这些客户端不是服务端需要的数据。我们可能对数据判断,如不是我们需要的数据格式,主动断开。原创地址:http://www.luofenming.com/show.aspx?id=ART2020111100001