如何在Java流通信中获取客户端的IP地址

时间:2016-09-09 01:42:59

标签: java sockets stream

我有一个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地址。

为什么会这样?

1 个答案:

答案 0 :(得分:2)

您看到的0:0:0:0:0:0:0:1是IPv6等价物127.0.0.1。这是因为您在服务器上启用了IPv6,并且正在从同一台计算机建立与服务器的连接。

您可以通过强制客户端仅使用IPv4协议来查看IPv4地址。另一方面,您的Web服务器主机很可能使用您在呼叫时可以看到的IPv4互联网地址 -

Socket clientSocket_B = new Socket(WebServerHost, workPort2);
clientSocket_B.getRemoteSocketAddress().toString();