例如,套接字异常可以返回与超时有关的消息或“活动被拒绝”消息,这通常是由用于其他用途的封闭端口引起的。
如何基于此适当设置开关盒?
我可以做一个ex.Message.Contains()
,但如果它在非英语系统上运行,则该消息将不是英语,因此.Contains()
将不匹配。
是否可以检查某种签名,还是可以更改的全局不变的异常代码?
答案 0 :(得分:3)
如果您正确使用try-catch
,即:
try
{
...
}
catch (SocketException ex) // this should have an s at the beginning...
{
}
您可以使用Visual Studio功能来获取此信息(编写switch (ex.SocketErrorCode)
并按 tab ):
switch (ex.SocketErrorCode)
{
case SocketError.AccessDenied:
break;
case SocketError.AddressAlreadyInUse:
break;
case SocketError.AddressFamilyNotSupported:
break;
case SocketError.AddressNotAvailable:
break;
case SocketError.AlreadyInProgress:
break;
case SocketError.ConnectionAborted:
break;
case SocketError.ConnectionRefused:
break;
case SocketError.ConnectionReset:
break;
// some dozens more
default:
break;
}
您可以看到the docs来查找要控制的任何情况。
答案 1 :(得分:0)
专门针对套接字异常,您可以通过SocketException.ErrorCode
属性获取套接字错误代码,然后打开它。我喜欢使用发布于here
但是从广义上讲,我认为您看错了。没有使用自定义字段处理异常的“通用”或“通用”方式。从继承的角度来看它,您唯一可以依靠的字段就是从Exception
继承的字段。如果您要处理从Exception
继承的类,则应为该异常专门进行编码。
请记住,您始终可以将 type 异常用于条件处理:
try
{
...
}
catch(SocketException sockex)
{
...
}
catch(Exception ex)
{
...
}
答案 2 :(得分:0)
您可以将Socket Exception与其他任何异常分开,例如:
try
{
// Your socket based code
}
catch (SocketException e)
{
// Handle Socket Exception
}
catch (Exception e)
{
// Handle Any other exception
}
也,您可以检查 HResult属性,以查看是否可以根据所得到的错误类型来获得不同的值。