我在C#.net 4.6中编写了一个服务器和客户端,它应该接受ipv6和ipv4连接。服务器侦听器的相关代码如下:
listener = new Socket(AddressFamily.InterNetworkV6,
SocketType.Stream, ProtocolType.Tcp);
listener.SetSocketOption(SocketOptionLevel.IPv6, SocketOptionName.IPv6Only, false);
listener.DualMode = true;
// Bind the socket to the local endpoint and listen for incoming connections.
try
{
listener.Bind(new IPEndPoint(IPAddress.IPv6Any, 3425));
listener.Listen(100);
客户端连接如下:
socket = new Socket(AddressFamily.Unspecified, SocketType.Stream, ProtocolType.Tcp);
try
{
IPAddress[] ip = Dns.GetHostAddresses(ipAddress);
StatusBoxHandler.statusText = "Connecting...";
IPEndPoint remoteEP = new IPEndPoint(ip[0], port);
Debug.Log(ip[0]);
socket.Connect(remoteEP);
到目前为止,我遇到了3个不同的人尝试使用给定客户端连接到此服务器的问题。然而,第四个运行Windows 8.1的人遇到了一些困难。
他无法使用主机名ping服务器,因为它表示目标无法访问,并且他无法ping服务器ipv6地址,从而出现错误:
PING:传输失败,一般失败。
然而,他能够成功ping通ipv4地址。奇怪的是,他启用了ipV6,我已经验证了这一点。
当尝试连接客户端并强制它使用ipv4地址时,他获得了错误:
System.Net.Sockets.SocketException:系统在尝试使用调用中的指针参数时检测到无效指针地址。
我还验证了在日志中它连接到我用来连接的完全相同的ipv4地址,所以它不是它获取错误的IP地址的问题。另外,我已经使用ipv6,ipv4和dns主机名地址成功地从客户端连接到服务器,它们对我的机器和其他两个都可以正常工作。
我的代码中是否存在某些问题,我缺少或只是某种奇怪的无关问题只会影响他的机器?