服务器关闭时C#:SocketException?

时间:2018-04-18 13:14:56

标签: c# .net

我目前收到一个奇怪的错误,并希望针对一个特定情况处理它。当服务器关闭且客户端仍然连接到它时,客户端将抛出异常

  

System.Net.Sockets.SocketException:'现有连接是   被远程主机'

强行关闭

我知道如何处理这个问题,尝试并捕获,但我处理的原因不止一个,这个例外会被抛到这里吗?我只想在服务器关闭时处理它,而不是所有其他原因可能突然发生此异常。有人可以帮忙吗?

发生错误的是哪一行?

var bytesReceived = _socket.EndReceive(asyncResult);

用什么方法?

private void OnIncomingData(IAsyncResult asyncResult)

方法内容

var bytesReceived = _socket.EndReceive(asyncResult);

try
{
    var packet = new byte[bytesReceived];
    Array.Copy(_buffer, packet, bytesReceived);

    var received = Encoding.UTF8.GetString(packet);
    CoreUtilities.LogToConsole("Received data: " + received);
}
catch
{
    Dispose();
}
finally
{
    try
    {
        _socket.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, OnIncomingData, _socket);
    }
    catch
    {
    }
}

1 个答案:

答案 0 :(得分:1)

您可以使用SocketExceptionSocketErrorCode属性处理此问题。根据这篇TechNET文章(我无法在MSDN上找到任何内容),错误代码应为10054,与SocketError.ConnectionReset枚举值匹配,如下所示:

enter image description here

处理特定错误的示例:

 try
 {
    _socket.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, OnIncomingData, _socket);
 }
 catch (SocketException ex)
 {
    if (ex.SocketErrorCode == SocketError.ConnectionReset)
    {
       //Do Something
    }
 }