我正在尝试使用Java applet获取Real Client IP地址。我想最终在PHP脚本中使用它,以帮助进行安全性和身份验证。没有任何PHP方法可以工作,因为各种HTTP头都不可用,并且可以轻易欺骗。
所以我采用了Get the correct local IP address from java applet和http://www.jguru.com/faq/view.jsp?EID=15832
中建议的方法但是,我无法编译我的简单Applet。我是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 :(得分:2)
您的socket
变量在try
块内声明,因此无法在该块之外访问。您可以通过推送try
:
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());
}
}
或者在socket
之外声明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);
}
}