当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《SocketException:地址与请求的协议不兼容》经验,为你挑选了1个好方法。

我试图在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上的错误代码详细信息,但它对我没有多大意义.

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



1> dtb..:

在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 ......或者您可以使用IPAddress中的地址系列,当然......
推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有