【问题标题】:How to get the client's IP address in Java stream communicationJava流通信中如何获取客户端的IP地址
【发布时间】: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,那么真实地址可能不可用。

标签: java sockets stream


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-14
    • 2012-02-16
    • 2015-12-20
    • 2016-03-29
    • 2019-01-14
    • 2019-11-13
    • 1970-01-01
    • 2013-07-07
    相关资源
    最近更新 更多