Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.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
Java RMI服务器使用了错误的IP地址_Java_Networking_Rmi - Fatal编程技术网

Java RMI服务器使用了错误的IP地址

Java RMI服务器使用了错误的IP地址,java,networking,rmi,Java,Networking,Rmi,当我的网卡连接到网络A时,我正在启动我的RMI服务器。运行我的客户端按预期成功并打印“Hello World”。一旦我将网络连接更改为网络B(不重新启动RMI服务器!),我就无法再连接到服务器。 服务器和客户端总是在同一台主机上运行,所以使用localhost地址就足够了 服务器: public class HelloImpl extends UnicastRemoteObject implements Hello { public HelloImpl() throws RemoteE

当我的网卡连接到网络A时,我正在启动我的RMI服务器。运行我的客户端按预期成功并打印“Hello World”。一旦我将网络连接更改为网络B(不重新启动RMI服务器!),我就无法再连接到服务器。 服务器和客户端总是在同一台主机上运行,所以使用localhost地址就足够了

服务器:

public class HelloImpl extends UnicastRemoteObject implements Hello {

    public HelloImpl() throws RemoteException {
    }

    public String sayHello() {
        return "Hello world!";
    }

    public static void main(String args[]) throws RemoteException {
        Registry registry = LocateRegistry.createRegistry(3128);
        registry.rebind("HelloServer", new HelloImpl());
    }
}
客户:

public class HelloClient {

    public static void main(String arg[]) throws Exception{
        Registry registry=LocateRegistry.getRegistry("localhost", 3128);;
        Hello result = (Hello) registry.lookup("HelloServer");
        System.out.println(result.sayHello());
    }

}
例外情况是:

HelloClient exception: Connection refused to host: 192.168.169.136; nested exception is: 
    java.net.ConnectException: Connection timed out: connect
这是指连接到网络A时分配的我的IP地址。注册表查找按预期工作,只有调用
result.sayHello()
失败,出现上述异常


如何告诉RMI在导出任何远程对象(包括注册表)之前,在服务器JVM上将系统属性
java.RMI,server.hostname
设置为127.0.0.1。

在服务器JVM上将系统属性
java.RMI,server.hostname
设置为127.0.0.1,在导出任何远程对象(包括注册表)之前。

请尝试使用172.0.0.1,它应与localhost相同。但是,您的计算机可能已将本地主机映射到其他对象。根据错误消息,通过交换网络,您的IP地址已更改。看起来Java使用的是网络IP地址,而不是172.0.0.1版本的localhostTry,后者应该与localhost相同。但是,您的计算机可能已将本地主机映射到其他对象。根据错误消息,通过交换网络,您的IP地址已更改。看起来Java使用的是网络IP地址而不是本地主机这是否也适用于只有IPv6处于活动状态的主机?它适用于您必须从默认值更改存根中IP地址的任何主机。这是否也适用于只有IPv6处于活动状态的主机?它适用于您必须更改存根中IP地址的任何主机从默认值。