2011-07-14 118 views
1

我正在嘗試使用Java小程序獲取Real Client IP地址。我想最終在PHP腳本中使用它,以幫助安全和身份驗證。由於各種HTTP頭不可用並且容易被欺騙,所以PHP方法都不會起作用。Java Socket以查找真實客戶端IP地址

所以我採用的方法Get the correct local IP address from java applethttp://www.jguru.com/faq/view.jsp?EID=15832

建議。然而,我不能編譯我的簡單的小程序。我是Java新手,所以有點困惑。

代碼是:

import java.net.*; 
import java.io.*; 

public class SimpleSocketClient 
{ 
    public SimpleSocketClient() 
    { 
     try 
     { 
      Socket socket = new Socket("89.185.150.131", 80); 
     } 
     catch(Exception exc) 
     { 
      System.out.println("Error in initialising the network - " + exc.toString()); 
     } 

     InetAddress addr = socket.getLocalAddress(); 
     String hostAddr = addr.getHostAddress(); 
     System.out.println("Addr: " + hostAddr); 

    } 

} 

編譯時,我得到以下錯誤:

C:\mba>javac SimpleSocketClient.java 
SimpleSocketClient.java:18: cannot find symbol 
symbol : variable socket 
location: class SimpleSocketClient 
     InetAddress addr = socket.getLocalAddress(); 
         ^
1 error 

C:\mba> 

感謝

+0

*「我試圖用Java來獲得真正的客戶端IP地址小程序「。*爲什麼? –

+0

答案是正確的 - 我強烈建議您接受它。 –

回答

2

socket變量被宣佈爲try塊內,因此無法訪問外該塊。您可以通過按下try內的所有代碼進行細微的變化:通過聲明socket

public SimpleSocketClient() 
{ 
    try 
    { 
     Socket socket = new Socket("89.185.150.131", 80); 

     InetAddress addr = socket.getLocalAddress(); 
     String hostAddr = addr.getHostAddress(); 
     System.out.println("Addr: " + hostAddr); 
    } 
    catch(Exception exc) 
    { 
     System.out.println("Error in initialising the network - " + exc.toString()); 
    } 
} 

還是try

public SimpleSocketClient() 
{ 
    Socket socket = null; 
    try 
    { 
     socket = new Socket("89.185.150.131", 80); 
    } 
    catch(Exception exc) 
    { 
     System.out.println("Error in initialising the network - " + exc.toString()); 
    } 
    if(socket != null) { 
     InetAddress addr = socket.getLocalAddress(); 
     String hostAddr = addr.getHostAddress(); 
     System.out.println("Addr: " + hostAddr); 
    } 
}