我有两个java类,一个是客户端,另一个是服务器,在客户端我必须给服务器ip地址,但我想让它动态,所以客户端知道第三台机器的ip(命名system)搜索方法(如DNS)并返回提供此方法的特定服务器的IP地址。
编辑:
classe客户:
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();
}
}
}
服务器:
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();
}
}
}
答案 0 :(得分:0)
您无法使用RMI注册表执行此操作。只有与Registry在同一主机中运行的进程才能绑定到该进程。您必须使用不同的命名服务,例如LDAP。
然而,你的描述的其余部分是RMI已经做的。您在注册表中查找名称,它会返回一个知道如何与相应远程对象通信的存根。