1

我在项目中使用websocket-sharp作为网络服务器。在 Windows 上,我HttpServer像这样创建 2

HttpServer s1 = new HttpServer("http://[::0]:8080")     // IPv6
HttpServer s2 = new HttpServer("http://0.0.0.0:8080");  // IPv4

这适用于我测试过的所有机器。

但是,用户报告从第一行收到此错误

SocketException: An address incompatible with the requested protocol was used.

System.Net.Sockets.Socket..ctor (AddressFamily family, SocketType type, ProtocolType proto)
WebSocketSharp.Net.EndPointListener..ctor (System.Net.IPAddress address, Int32 port, Boolean secure, System.String certificateFolderPath, WebSocketSharp.Net.ServerSslConfiguration sslConfig, Boolean reuseAddress)
WebSocketSharp.Net.EndPointManager.getEndPointListener (System.Net.IPAddress address, Int32 port, Boolean secure, WebSocketSharp.Net.HttpListener listener)
WebSocketSharp.Net.EndPointManager.addPrefix (System.String uriPrefix, WebSocketSharp.Net.HttpListener listener)

为什么?

我们认为这一定与那台没有 IPv6 的机器有关,但事实并非如此。ipconfig在那台机器上报告

Wireless LAN adapter Wi-Fi 2:

Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : Intel(R) Dual Band Wireless-AC 7265 #2
Physical Address. . . . . . . . . : 5C-E0-C5-D7-EA-6A
DHCP Enabled. . . . . . . . . . . : Yes
Autoconfiguration Enabled . . . . : Yes
Link-local IPv6 Address . . . . . : fe80::48f3:fe4f:7b1:5cf4%19(Preferred)
IPv4 Address. . . . . . . . . . . : 10.198.123.252(Preferred)

最重要的是,在尝试在我自己的机器上解决问题时,我尝试从网络属性中禁用 IPv6。我的机器上没有错误。我还尝试使用Microsoft 的这些脚本禁用 IPv6 。我已经验证他们关闭了 IPv6,因为ipconfig没有显示任何与 IPv6 相关的数据。我的机器上仍然没有错误。

用户提到他们的机器上有 VMware。他们没有在 VMware 中运行我的应用程序,但 VMware 在机器上,因此安装了网络驱动程序。

所以我安装了VMware,但仍然没有错误。也安装VirtualBox,仍然没有错误。

他们还提到它可以在他们的有线台式机上工作,但不能在他们的 wifi 笔记本电脑上工作,所以我出去拿了一个 USB WiFi 适配器并关闭了有线访问,但仍然没有错误。还尝试了另一台笔记本电脑以及 Windows 8.1 和 Windows 10(与用户相同)

我看到这个 q&a引用了相同的错误消息,但它使用的是不同的较低级别的 API

所以我的问题是

  1. 为什么它只在一台机器上失败(与它没有失败的 100 台机器相比)

  2. 如何检测何时可以安全执行第一行?

4

0 回答 0