Java RMI 客户端如何使用域名连接到 Java RMI 服务器

How can a Java RMI client connect to a Java RMI server using a domain name

我正在使用 Java RMI 编写应用程序。我已经创建了客户端和服务器。但是,我只使用本地主机。我希望能够使用域名让客户端联系服务器。我已经注册了一个域名:hotel.ddns.net。我希望能够将它保存在个人网络中,而与端口转发等无关。客户端和服务器位于不同的计算机上。我一直在寻找解决方案,但这些与我的问题没有直接关系。你们能帮助我吗,因为我还是新手?

这是我的客户端代码:

package Hotel_;

import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java_rmi.java_rmi_interface;

public class ClientRMI {

    public java_rmi_interface connectToServer() throws NotBoundException{
    try{
        Registry myregistry = LocateRegistry.getRegistry("127.0.0.1",1099);
        java_rmi_interface myinterface = (java_rmi_interface)myregistry.lookup("bookingServer");
        System.out.println("client reaaaaaaady");
        
        
    return myinterface;
      
    }catch(RemoteException e){
        e.printStackTrace();
    }
    
    return null;
    }
}

这是我的服务器代码

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.Registry;
import java.rmi.registry.LocateRegistry;

public class ServerRMI {
    public static void main(String[] args){
    try{
        //Timer timer = new Timer();
        //timer.deletefunc();
        Registry myregitry = LocateRegistry.createRegistry(1099);//create a registry that can be 
        accessed on this port
        QueryCentre qs = new QueryCentre();//an instance of QueryCenter where remote methods are 
    found
        Naming.rebind("bookingServer", qs);//naming the server and passing the class where remote 
     methods are found
        System.out.println("server ready and waitiiiinnnggg!!!!!");
    }catch(RemoteException | MalformedURLException e){
        e.printStackTrace();
    }
    }  
}

如果您完全在具有私有 IP 地址(即 192.168.x.x)的个人网络中工作,那么 DDNS 将不会为您做任何事情。它仅适用于外部可路由地址。

您有几个选择,从最复杂到最不复杂的是:

  1. 运行 局域网内的 DNS 服务器,用于将主机名映射到本地 IP 地址。这是一项艰巨的任务,但如果您想了解有关 DNS 的更多信息,可能会很有趣。
  2. 在 /etc/hosts 中添加行以将名称映射到本地 IP 地址。您必须确保每个想要与服务器通信的主机都在其 /etc/hosts.
  3. 副本中具有映射
  4. 省去主机名,只使用 IP 地址。

我强烈建议您使用#3 进行简单设置。