首页 > 解决方案 > Java RMI 客户端如何使用域名连接到 Java RMI 服务器

问题描述

我正在使用 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();
    }
    }  
}

标签: javarmi

解决方案


如果您完全在具有私有 IP 地址(即 192.168.xx)的个人网络中工作,那么 DDNS 将无济于事。它仅适用于外部可路由地址。

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

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

我强烈推荐 #3 用于您的简单设置。


推荐阅读