如何在不同的机器上做namming系统witj rmi

时间:2017-12-15 14:32:32

标签: java dns rmi

我有两个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();
    }
}

}

1 个答案:

答案 0 :(得分:0)

您无法使用RMI注册表执行此操作。只有与Registry在同一主机中运行的进程才能绑定到该进程。您必须使用不同的命名服务,例如LDAP。

然而,你的描述的其余部分是RMI已经做的。您在注册表中查找名称,它会返回一个知道如何与相应远程对象通信的存根。