我试图在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)地址.
更改代码以创建套接字以使用指定IP地址的地址系列:
Socket serverSocket = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp); ?
注意:有一个获取localhost IP地址的快捷方式:您只需使用IPAddress.Loopback(127.0.0.1)或IPAddress.IPv6Loopback(:: 1)即可.