java - 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();
}
}
}
解决方案
如果您完全在具有私有 IP 地址(即 192.168.xx)的个人网络中工作,那么 DDNS 将无济于事。它仅适用于外部可路由地址。
您有几个选择,从最复杂到最不复杂,它们是:
- 在 LAN 中运行 DNS 服务器以将主机名映射到本地 IP 地址。这是一项艰巨的任务,但如果您想了解有关 DNS 的更多信息,可能会很有趣。
- 在 /etc/hosts 中添加行以将名称映射到本地 IP 地址。您必须确保每个想要与服务器通信的主机在其 /etc/hosts 的副本中都有映射。
- 无需使用主机名,只需使用 IP 地址。
我强烈推荐 #3 用于您的简单设置。
推荐阅读
- javascript - NextJS getInitialProps
- python - SpriteCollide 每次碰撞只运行一次
- angular - 在 Angular Overlay 上动态更改 ElementRef 以重新定位它?
- javascript - 尝试在页面中创建“div”选择器:JavaScript TypeError
- php - 如何仅显示数据库中 user_id 与 Laravel 中的当前用户相同的不同数据
- python - Python Plotly - 为什么 2 个曲面图显示不同的结果?
- reactjs - Redux Toolkit 中的自定义中间件
- c - C中矩阵动态分配的模块化
- c - Revealer 在活动时隐藏另一个 Revealer (gtk_tree_store) - GTK3 , C
- html - ffmpeg 流桌面代替 -i /dev/video0