我试图在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中运行良好。
我已经检查了Error code details on MSDN,但对我来说没有多大意义。
有人遇到过类似的问题吗?有什么帮助吗?
答案 0 :(得分: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);
↑
注意:有获取 localhost IP地址的快捷方式:您只需使用IPAddress.Loopback(127.0.0.1)或IPAddress.IPv6Loopback (:: 1)。
答案 1 :(得分:2)
编辑C:\ Windows \ System32 \ drivers \ etc \ hosts并添加“127.0.0.1 localhost”行(如果不存在,则不包括引号)