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

我试图在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; } 

上面的代码在Win-XP sp3中工作正常。

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

任何人都遇到类似的问题? 任何帮助?

在Windows Vista(和Windows 7)上,Dns.GetHostEntry也返回IPv6地址。 在你的情况下,IPv6地址(:: 1)首先在列表中。

您不能使用IPv4(InterNetwork)套接字连接到IPv6(InterNetworkV6)地址。

更改您的代码以创build套接字以使用指定IP地址的地址族:

 Socket serverSocket = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp); ↑ 

注意 :有一个快捷方式来获取localhost的IP地址:您可以简单地使用IPAddress.Loopback (127.0.0.1)或IPAddress.IPv6Loopback (:: 1)。

编辑C:\ Windows \ System32 \ drivers \ etc \ hosts并添加行“127.0.0.1 localhost”(如果不存在,不包括引号)