Java 如何在不同的主机上使用RMI实现命名系统?
我有两个java类,一个是客户机,另一个是服务器,在客户机中我必须给出服务器ip地址,但我想使其动态化,以便客户机知道第三台机器(命名系统)的ip,该机器搜索方法(如DNS),并返回提供此方法的特定服务器的ip地址 编辑: classe客户端:Java 如何在不同的主机上使用RMI实现命名系统?,java,dns,rmi,Java,Dns,Rmi,我有两个java类,一个是客户机,另一个是服务器,在客户机中我必须给出服务器ip地址,但我想使其动态化,以便客户机知道第三台机器(命名系统)的ip,该机器搜索方法(如DNS),并返回提供此方法的特定服务器的ip地址 编辑: classe客户端: public class Client { private Client() {} public static void main(String[] args) { String host = (args.length < 1) ? n
public class Client {
private Client() {}
public static void main(String[] args) {
String host = (args.length < 1) ? null : args[0];
try {
//Registry registry = LocateRegistry.getRegistry(host);
Registry registry = LocateRegistry.getRegistry("192.168.1.9",1091);
Calculator stub = (Calculator) registry.lookup("Hello");
String response = stub.add(4,2);
System.out.println("response: " + response);
} catch (Exception e) {
System.err.println("Client exception: " + e.toString());
e.printStackTrace();
}
}
}您不能使用RMI注册表执行此操作。只有与注册表在同一主机上运行的进程才能绑定到它。您必须使用不同的命名服务,如LDAP
然而,您描述的其余部分是RMI已经在做的事情。您在注册表中查找一个名称,它会返回一个存根,知道如何与相应的远程对象通信。请提供您的代码或您迄今为止尝试过的内容。我不知道这个问题的“范围太广”是什么。因此,我必须实现LDAP并将其放在单独的计算机中,以便客户端对其进行寻址,它将服务器的正确ip地址返回给客户端,这比这个简单。只需将LDAP服务器用作注册表即可。将远程对象绑定到LDAP服务器;让客户端查找LDAP服务器以获取存根,然后调用remone方法。RMI为您管理IP地址。
public class Server implements Calculator{
public Server() {}
public String add(int a,int b) {
return "Hello, a+b= "+(a+b);
}
public String sub(int a,int b) {
return "Hello, a-b= "+(a-b);
}
public static void main(String args[]) {
try {
Server obj = new Server();
Calculator stub = (Calculator) UnicastRemoteObject.exportObject(obj, 0);
// Bind the remote object's stub in the registry
Registry registry = LocateRegistry.createRegistry(1091);
registry.bind("Hello", stub);
System.err.println("Server ready");
} catch (Exception e) {
System.err.println("Server exception: " + e.toString());
e.printStackTrace();
}
}