【发布时间】:2017-01-17 01:46:21
【问题描述】:
我有一个使用套接字流处理客户端请求的 Java 服务器程序。它工作正常。
但是,我需要在服务器端查看客户端的 IP 地址。我在这里看到几个类似的问题,他们都建议使用getRemoteSocketAddress()(或getInetAddrees())方法。
这是一个例子:
ServerSocket serverSocket_A = new ServerSocket(port1);
Socket clientSocket_A = serverSocket_A.accept();
程序在此处被阻止侦听客户端的请求。当收到请求时,处理继续。这意味着clientSocket_A 已经连接到远程客户端。
现在,如果我发布
requesterAddress = clientSocket_A.getRemoteSocketAddress().toString();
它返回这个奇怪的地址:0:0:0:0:0:0:0:1 而不是 127.0.0.1(我的客户端在本地机器上)。
知道如何解决这个问题吗?
有趣的是,我还有一个ClientSocket_B,设置在这个服务器程序中,它连接到 Web 服务器。对这个clientSocket_B应用相同的方法
Socket clientSocket_B = new Socket(WebServerHost, workPort2);
clientSocket_B.getRemoteSocketAddress().toString();
返回 WebServer 的正确 IP 地址。
为什么会这样?
【问题讨论】:
-
如果流量通过代理服务器或NAT,那么真实地址可能不可用。