Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在不同的主机上使用RMI实现命名系统?_Java_Dns_Rmi - Fatal编程技术网

Java 如何在不同的主机上使用RMI实现命名系统?

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

我有两个java类,一个是客户机,另一个是服务器,在客户机中我必须给出服务器ip地址,但我想使其动态化,以便客户机知道第三台机器(命名系统)的ip,该机器搜索方法(如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();
    }
}

}您不能使用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();
    }
}