socket.getInetAddress()。getHostAddress()奇怪的问题

时间:2012-07-21 12:06:22

标签: java windows sockets

我有一个用java编写的遗留服务器应用程序,在过去的六年中,在运行Java 6的Windows 2003机器上运行良好。 我们最近将应用程序迁移到运行最新版本java的全新Windows 2008机器上 虽然应用程序似乎工作正常,但有一个奇怪的问题

代码String remoteip=socket.getInetAddress().getHostAddress()似乎返回服务器计算机的Internet IP,而不是返回远程客户端的IP。
在过去的6到7年中,这在Linux和Windows 2003机器上都能正常运行。

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

有关可能混淆java应用程序的任何线索?

1 个答案:

答案 0 :(得分:3)

Java doc说:

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

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

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