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