C# Socket.RemoteEndPoint返回网关地址

C# Socket.RemoteEndPoint返回网关地址,c#,sockets,C#,Sockets,出于某种原因,C#socket.RemoteEndPoint开始返回默认网关的地址。它过去是有效的,我知道代码没有改变。我不确定它是什么时候开始发生的,因为日志回溯得不够远,所以我不确定这台服务器可能发生了什么导致了这种情况。一切似乎都正常运转。只是不再获得远程IP 有人知道这是什么原因吗 这是相关代码 public void startClientListening(string ipString, int port) { IPAddress

出于某种原因,C#socket.RemoteEndPoint开始返回默认网关的地址。它过去是有效的,我知道代码没有改变。我不确定它是什么时候开始发生的,因为日志回溯得不够远,所以我不确定这台服务器可能发生了什么导致了这种情况。一切似乎都正常运转。只是不再获得远程IP

有人知道这是什么原因吗

这是相关代码

    public void startClientListening(string ipString, int port)
    {

                IPAddress ip = IPAddress.Parse(ipString);

                // Create the listening socket...
                clientListenerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

                IPEndPoint ipLocal = new IPEndPoint(ip, port);
                // Bind to local IP Address...
                clientListenerSocket.Bind(ipLocal);
                // Start listening...
                clientListenerSocket.Listen(32);
                // Create the call back for any client connections...
                clientListenerSocket.BeginAccept(onClientConnect, clientListenerSocket);
    }

    private void onClientConnect(IAsyncResult asyn)
    {
            Socket workerSocket = clientListenerSocket.EndAccept(asyn);
            workerSocket.NoDelay = true;

            //This returns 192.168.1.1 rather than the remoteIp
            string remoteIp = ((IPEndPoint)workerSocket.RemoteEndPoint).Address.ToString();

    }

如果默认网关以前是路由器/ip防火墙,但现在是代理/应用程序防火墙,则可能发生这种情况


在这种情况下,ip连接由代理实例化,因此您可以看到代理的ip地址,而不是真正的客户端的ip地址。

我不知道这是问题的原因,但您应该去掉那些try/catch块-它们阻止您发现问题所在。代码在很大程度上被删减。我刚刚取出了相关的套接字代码。不管是否被修剪,都要去掉那些try/catch块。你也应该在实际代码中去掉它们。在实际代码中有异常的处理和日志记录。。。我不明白代码是怎么做到的,它在工作,然后就没有了。我想知道路由器/防火墙.net framework更新是否可能导致此问题。您的客户端计算机是否能够ping或跟踪服务器/侦听器?