我正在编写一个使用RMI的客户端服务器应用程序。我使用dyndns来获得一个不变的地址,在这个地址上我可以接受客户端的连接。但是我在服务器中执行绑定操作时遇到了一些问题,因为我收到了以下错误:连接被拒绝:连接
我这样做绑定操作:
MultiServer multi = new MultiServer(); // creates an instance of the remote object
LocateRegistry.createRegistry(port);
Naming.bind("//my_host_address.dyndns.org:my_port/MultiServer", multi);我需要安排什么?我打开了我使用的端口,并正确配置了dyndns服务(我确信它与套接字一起使用)。
编辑:
实际上,我在我的服务器上做了这样的事情:
//other code
MultiServer multi = new MultiServer();
System.setProperty("java.rmi.server.hostname", "hostname.dyndns.org");
LocateRegistry.createRegistry(2367); // the server will listen on port 2367
Naming.bind("//localhost:2367/MultiServer", multi);够了吗?或者我必须向客户说明其他信息?在客户端,我只需这样做:
IRemoteServer remote = (IRemoteServer)Naming.lookup("rmi://hostname.dyndns.org:2367/MultiServer");在此指令之后,我通常使用远程接口公开的方法。
但是,按照以下步骤,我将收到以下错误消息:
Connection refused to host: **SERVER_INTERNAL_IP**; nested exception is:
java.net.ConnectException: Connection timed out: connect在解析dns主机地址时,客户端怎么可能指向服务器的内部ip地址,而不是其真正的ip地址?
EDIT2:我注意到客户端能够查找服务器,但它不能调用其远程方法,而异常是在客户端尝试调用远程方法时引发的。
发布于 2013-07-22 21:43:17
在绑定、重新绑定或取消绑定时,只需使用“localhost”。无论如何,您只能绑定到本地主机中的注册表,那么为什么还要使用其他东西呢?
但是,默认情况下,主机的IP地址嵌入到存根中,如果IP地址发生更改,存根将无法神奇地更改。您必须通过java.rmi.server.hostname.将'dyndns‘主机名设置为存根
发布于 2015-06-06 20:29:18
尝试使用以下方式运行服务器:
java -Djava.rmi.server.hostname=yourserver.dyndns.org -Djava.security.policy=yourPolicy.txt -cp 'yourjar.jar' yourServerClass
https://stackoverflow.com/questions/17791300
复制相似问题