我目前收到一个奇怪的错误,并希望针对一个特定情况处理它。当服务器关闭且客户端仍然连接到它时,客户端将抛出异常
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
{
}
}
答案 0 :(得分:1)
您可以使用SocketException的SocketErrorCode
属性处理此问题。根据这篇TechNET文章(我无法在MSDN上找到任何内容),错误代码应为10054,与SocketError.ConnectionReset
枚举值匹配,如下所示:
处理特定错误的示例:
try
{
_socket.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, OnIncomingData, _socket);
}
catch (SocketException ex)
{
if (ex.SocketErrorCode == SocketError.ConnectionReset)
{
//Do Something
}
}