Java Socket找到真正的客户端IP地址

时间:2011-07-14 11:23:45

标签: java

我正在尝试使用Java applet获取Real Client IP地址。我想最终在PHP脚本中使用它,以帮助进行安全性和身份验证。没有任何PHP方法可以工作,因为各种HTTP头都不可用,并且可以轻易欺骗。

所以我采用了Get the correct local IP address from java applethttp://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>

由于

1 个答案:

答案 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);
    }
}