解决Socket客户端长时间连接且不发送数据,服务端主动断开

首次发布:2020-11-11 14:16
Socket服务端可能有一些长期连接的Socket客户端,并且长期不发送数据到服务端,这样很浪费服务端资源。下面代码是服务端主动断开无用的Socket客户端
/// <summary>
/// 接收客户端发来的信息
/// </summary>
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