SocketException:地址与请求的协议不兼容

Ami*_*itd 43 .net c# sockets

我试图在Win7-64bit机器上运行.Net套接字服务器代码.
我一直收到以下错误:

System.Net.Sockets.SocketException:使用了与请求的协议不兼容的地址.
错误代码:10047

代码段是:

IPAddress ipAddress = Dns.GetHostEntry("localhost").AddressList[0];
IPEndPoint ip = new IPEndPoint(ipAddress, 9989);
Socket serverSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp);
try
{
    serverSocket.Bind(ip);
    serverSocket.Listen(10);
    serverSocket.BeginAccept(new AsyncCallback(AcceptConn), serverSocket);           
}
catch (SocketException excep)
{
  Log("Native code:"+excep.NativeErrorCode);
 // throw;
}    
Run Code Online (Sandbox Code Playgroud)

上面的代码在Win-XP sp3中运行良好.

我已经检查了MSDN上的错误代码详细信息,但它对我没有多大意义.

有人遇到过类似的问题吗?有帮助吗?

dtb*_*dtb 87

在Windows Vista(和Windows 7)上,Dns.GetHostEntry也返回IPv6地址.在您的情况下,IPv6地址(:: 1)是列表中的第一个.

您无法使用IPv4(InterNetwork)套接字连接到IPv6(InterNetworkV6)地址.

更改代码以创建套接字以使用指定IP地址的地址系列:

Socket serverSocket =
    new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
                        ?
Run Code Online (Sandbox Code Playgroud)

注意:有一个获取localhost IP地址的快捷方式:您只需使用IPAddress.Loopback(127.0.0.1)或IPAddress.IPv6Loopback(:: 1)即可.

  • +1 ......或者您可以使用IPAddress中的地址系列,当然...... (4认同)