c++ - .Net Socket 类错误代码

标签 c++ .net sockets winapi

我一直在研究用于创建 socket 的 C++(或 Windows API)方法和用于创建 socket 的 .Net 方法。我担心的是,在 Windows 套接字中可用的相同错误代码是否也可在 .Net Socket 类中使用。我看过this page关于“Windows 套接字错误代码”以及 this page ,它描述了 .Net Socket 类的错误代码。

查看以上两个页面后,似乎 .Net Socket 类提供了与 Windows API 一样多的 socket 错误报告。我更愿意使用 .Net 来实现 Socket,因为我觉得对于我这样一个在 C++ 和网络编程方面知识不广的人来说会更容易.但是,这项工作要求我能够报告与 Windows API 相同粒度的错误。

我试图在这里尽可能具体,但根据所提供的信息,关于将两者与错误代码进行比较,您能告诉我什么?据我所知,我认为 C# Socket 类在这方面与 Windows API 一样强大。

最佳答案

如果您在 .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显示每个枚举代表的 native 常量。

关于c++ - .Net Socket 类错误代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27070738/

相关文章:

c++ - 套接字编程 C++ setsockopt()

Java心跳设计

c++ - 如何在 Android NDK 中使用 c++0x 线程?

c++ - 怎么可能在 C++ 中的 main() 中不声明任何内容,但编译后却有一个工作应用程序?

c# - WNetAddConnection2 和错误 1219 - 自动断开连接?

java对等使用UDP套接字

c++ - 来自 Xcode 8.3.2 : Non-portable path to file - specified path differs in case from file name on disk 的错误警告

c++ - 为什么 Boost.Asio 不支持基于事件的接口(interface)?

java - .NET 相当于 Java KeyFactory.getInstance "RSA"/"RSA/ECB/PKCS1Padding"

.net - 使用 MultiFieldQueryParser 时,Lucene 中的哪个字段包含我的搜索文本?