.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”错误

代码在AppDelegate中工作,但在任何其他类中都没有

带错误处理的python socket server服务范例的代码

socket错误代码

java socket 问题 错误提示:java.net.BindException: Address already in use: JVM_Bind

java Socket聊天系统错误,求解啊,谢谢各位啦!!!!!