2012-07-21 39 views
1

我有一個使用java編寫的遺留服務器應用程序,它在運行Java 6的Windows 2003機器上運行良好。
我們最近將應用程序遷移到運行最新版本的Java的全新Windows 2008機器。
儘管應用程序似乎做工精細,有一個奇怪的問題socket.getInetAddress()。getHostAddress()奇怪的問題

代碼String remoteip=socket.getInetAddress().getHostAddress()似乎返回服務器計算機的IP網絡,而不是返回遠程客戶端的IP的。
在過去的6 - 7年裏,這在Linux和Windows 2003計算機上都能正常工作。

爲了仔細檢查所有設置,我在IIS上設置了一個小型PHP網站,並打印出REMOTE_ADDr變量的值。它打印了客戶端的正確IP地址。

什麼可能會混淆Java應用程序的線索?

回答

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地址

+0

正確。這個API的操作從未改變過。 – EJP 2012-07-22 01:25:51

+0

在調用socket.getInetAddress()。getHostAddress()時,socket是在accept後接收到的cSocket。這已經工作了8年以上這是Java新版本的變化嗎?我應該將其更改爲socket.getRemoteAddress ) – 2012-07-23 09:47:49

+0

按照http://docs.oracle.com/javase/1.4.2/docs/api/java/net/Socket.html#getInetAddress()中的java文檔getInetAddress public InetAddress getInetAddress()返回其中的地址插座已連接。 返回: 該套接字連接的遠程IP地址;如果套接字未連接,則返回null。 – 2012-07-23 11:03:20