1

我有一个用 java 编写的遗留服务器应用程序,过去六年来它在运行 Java 6 的 windows 2003 机器上运行良好。
我们最近将该应用程序迁移到运行最新版本 java 的全新 windows 2008 机器上。
尽管该应用程序似乎运行良好,但有一个奇怪的问题

该代码String remoteip=socket.getInetAddress().getHostAddress()似乎返回服务器机器的互联网 IP,而不是返回远程客户端的 IP。
在过去的 6-7 年里,这在 Linux 和 Windows 2003 机器上都可以正常工作。

为了仔细检查所有设置,我在 IIS 上建立了一个小型 php 网站并打印了 REMOTE_ADDr 变量的值。它打印了客户端的正确 IP 地址。

关于什么可能会混淆 Java 应用程序的任何线索?

4

1 回答 1

3

Java 文档这样说:

 getInetAddress()
 Returns the local address of this server socket.

可能以前您在同一台机器上运行服务器和客户端。

更具体地说:您可能有一个 ServerSocket(sSocket) 等待来自客户端的连接。如果你调用 sSocket.getInetAddress(),你会得到服务器的 IP 地址。另一方面,ServerSocket 的作用是绑定一个 IP 地址和端口,并等待来自客户端的连接。当建立这样的连接时,sSocket.accept() 方法返回一个 Socket,它表示服务器与特定客户端的连接 (cSocket)。调用 cSocket.getRemoteAddress() 返回客户端的 IP

于 2012-07-21T12:12:28.307 回答