.Net Socket 类错误代码
Posted
技术标签:
【中文标题】.Net Socket 类错误代码【英文标题】:.Net Socket class error codes 【发布时间】:2014-11-21 21:33:01 【问题描述】:我一直在研究创建socket
的C++(或Windows API)方法和创建socket
的.Net 方法。我担心的是 Windows 套接字中可用的相同错误代码是否也可用于 .Net Socket
类。我查看了“Windows 套接字错误代码”上的this page 和this page,它描述了.Net Socket
类的错误代码。
查看上述两个页面后,似乎 .Net Socket
类在 socket
错误报告方面提供的功能与 Windows API 一样多。我更喜欢使用 .Net 来实现 Socket
,因为我觉得作为一个在 C++ 和网络编程方面没有广泛知识的人来说这会更容易。但是,这项工作要求我能够报告与 Windows API 相同粒度的错误。
我试图在这里尽可能具体,但是根据所提供的信息,关于将两者与错误代码进行比较,您能告诉我什么?据我所知,我认为 C# Socket
类在这方面与 Windows API 一样强大。
【问题讨论】:
【参考方案1】:如果您在 .NET 中收到 SocketException
,则异常有一个名为 ErrorCode 的属性,该属性映射到您在第一个链接中发布的所有值。
因此,这两个 API 的错误报告都非常精细。您链接到的枚举只是为了说服您,因此您无需为更流行的错误代码创建自己的常量。
const int WSA_E_NO_MORE= 10110;
const int WSAEACCES = 10013;
void Foo()
try
//...
catch(SocketException ex)
// These two lines are equivalent.
//if(ex.ErrorCode == WSAEACCES)
if(ex.ErrorCode == SocketError.AccessDenied)
//Do something special for access denied.
else if(ex.ErrorCode == WSA_E_NO_MORE)
//Do something special with the WSA_E_NO_MORE error code
如果您想要一种简单的方法来查看哪个枚举映射到哪个错误代码,the reference source 显示每个枚举代表的本机常量。
【讨论】:
以上是关于.Net Socket 类错误代码的主要内容,如果未能解决你的问题,请参考以下文章
在我的代码中出现这个“10038 wsa socket”错误
带错误处理的python socket server服务范例的代码
java socket 问题 错误提示:java.net.BindException: Address already in use: JVM_Bind