Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.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应用程序-ConnectException_Java_Rmi_Connectexception - Fatal编程技术网

在两台机器上运行Java RMI应用程序-ConnectException

在两台机器上运行Java RMI应用程序-ConnectException,java,rmi,connectexception,Java,Rmi,Connectexception,长话短说——我正在尝试在使用Windows的不同机器上运行一个RMI应用程序,其中包含一个客户端和一个服务器 服务器中的简化代码为: System.setProperty("java.rmi.server.hostname", "192.168.x.x"); Registry reg = LocateRegistry.createRegistry(1099); RemoteFoo foo = new RemoteFoo(); reg.rebind("Foo", foo);

长话短说——我正在尝试在使用Windows的不同机器上运行一个RMI应用程序,其中包含一个客户端和一个服务器

服务器中的简化代码为:

System.setProperty("java.rmi.server.hostname", "192.168.x.x");  
Registry reg = LocateRegistry.createRegistry(1099);  
RemoteFoo foo = new RemoteFoo();        
reg.rebind("Foo", foo);  
在客户机中,我有:

reg = LocateRegistry.getRegistry("192.168.x.x", 1099);
RemoteFooInterface foo = (RemoteFooInterface) reg.lookup("Foo");
我得到的异常是在我查找对象的行中的“Connection拒绝宿主:192.168.x.x;嵌套异常是Connection timed out:connect”

我从有类似问题的人那里读到一些关于StackOverflow的问题,这就是为什么我添加了一行来更改系统属性,以便在客户端使用的存根中嵌入正确的IP,但它仍然不起作用。

如果有人能为我提供一些关于我还能尝试什么的建议,我将非常感激

可能是服务器上的防火墙阻止了访问

确保您可以连接到端口(在您的情况下为1099)。例如,从客户端计算机打开 命令提示符
cmd.exe
并键入
telnet 192.168.x.x 1099
(这将连接到服务器上的端口1099)。如果显示“连接到…”,则该端口不可用,并且很可能客户端计算机无法访问服务器。尝试ping 192.168.x.x(如果服务器防火墙允许ICMP,它将工作)


尝试修复防火墙以允许通过端口1099进行连接,或者更好地禁用它(暂时),然后重试。清除后,运行RMI客户端

好的,我听从了你的建议,是防火墙导致了问题。现在,每当客户端试图将远程对象绑定到该注册表时,我就会遇到一个问题:reg.rebind(name,RemoteFoo);不允许绑定的原因,因为注册表位于远程主机上。这难道不是RMI的全部目的吗?对于与注册表不在同一台机器上的应用程序来说,它能够使用RMI吗?无论如何,非常感谢你的帮助!是的,您可以将对象绑定到服务器上的注册表。但是你不能远程绑定。远程对象在服务器计算机/进程上本地绑定。服务器部分通过访问本地网络接口(InetAddress.getLocalHost())在192.168.x.x上运行,而客户端则在不同的进程或机器上运行。不能在不同的VM或不同的进程上绑定对象。这是不允许的。您应该使用两种不同的过程。服务器端代码应该从机器192.168.x.x运行,客户端可以在网络中的任何位置(本地或远程)运行,但作为diff进程运行