C#客户端连接,Socket异常:系统检测到无效的指针地址

时间:2018-01-22 13:00:00

标签: c# sockets networking ipv6 ipv4

我在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主机名地址成功地从客户端连接到服务器,它们对我的机器和其他两个都可以正常工作。

我的代码中是否存在某些问题,我缺少或只是某种奇怪的无关问题只会影响他的机器?

0 个答案:

没有答案