我正在编写一个使用 RMI 的客户端-服务器应用程序。我使用 dyndns 来获得一个不可变的地址,我可以在该地址上接受客户端的连接。但是我在服务器中进行绑定操作时遇到了一些问题,因为我收到了这个错误: Connection Refused: connect
我以这种方式进行绑定操作:
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:我注意到客户端能够查找服务器,但它无法调用其远程方法,并且当我尝试从客户端调用远程方法时恰好引发了异常。