Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于查找实际客户端IP地址的Java套接字_Java - Fatal编程技术网

用于查找实际客户端IP地址的Java套接字

用于查找实际客户端IP地址的Java套接字,java,Java,我正在尝试使用Java小程序获取真正的客户端IP地址。我希望最终在PHP脚本中使用它,以帮助实现安全性和身份验证。所有的PHP方法都无法工作,因为各种HTTP头都不可用,并且很容易被欺骗 因此,我采用了和中建议的方法 但是,我无法编译我的简单小程序。我是Java新手,所以有点困惑 代码是: import java.net.*; import java.io.*; public class SimpleSocketClient { public SimpleSocketClient()

我正在尝试使用Java小程序获取真正的客户端IP地址。我希望最终在PHP脚本中使用它,以帮助实现安全性和身份验证。所有的PHP方法都无法工作,因为各种HTTP头都不可用,并且很容易被欺骗

因此,我采用了和中建议的方法

但是,我无法编译我的简单小程序。我是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>

谢谢

您的
套接字
变量在
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());
    }
}
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);
    }
}
或者通过在
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());
    }
}
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);
    }
}

“我正在尝试使用Java小程序获取真正的客户端IP地址。”为什么?答案是正确的-我强烈建议您接受它。