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

时间:2010-03-03 10:29:26

标签: c# .net 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;
}    

以上代码在Win-XP sp3中运行良好。

我已经检查了Error code details on MSDN,但对我来说没有多大意义。

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

2 个答案:

答案 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”行(如果不存在,则不包括引号)