gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 08:33:33 27 4
gpt4 key购买 nike

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

为什么会这样?

最佳答案

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

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

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

关于java - Java流通信中如何获取客户端的IP地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39402583/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com