0

サーバーがリモートである場合(クライアントと同じマシン上にない場合)、クライアントが実際にサーバーに接続する方法について混乱しています。私のコードは localhost を使用して正常に動作しますが、クライアントが実際にサーバー ホストに接続して rmiregistry を検索する方法がわかりません。サーバーのレジストリに保存されるものについて混乱しています。Sample ですか、それとも localhost ですか? これはばかげているかもしれませんが、クライアント側で localhost をその IP アドレスに変換して、 String url = "//" + server + ":" + 1099 + "/Sample"; を実行しようとしました。ここで、サーバーは getbyname() からの IP ですが、例外が発生します: java.rmi.NotBoundException: 127.0.0.1:1099/Sample 両方のマシンのクライアントとサーバーで発生しました。2つがリモートで接続する方法を理解しようとしていますが、うまくいきませんでした.

クライアント:

 import java.net.InetAddress;
import java.rmi.Naming;
import java.rmi.RemoteException;

public class SampleClient  {
    public static void main(String args[]) {



            String url = "//" + "localhost" + ":" + 1099 + "/Sample";

            SampleInterface sample = (SampleInterface)Naming.lookup(url);



        } catch(Exception e) {
            System.out.println("SampleClient exception: " + e);
        }
    }
}

サーバ:

  import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.RMISecurityManager;
import java.rmi.server.UnicastRemoteObject;

public class SampleServer {
    public static void main(String args[]) throws IOException {

        // Create and install a security manager
        if (System.getSecurityManager() == null)
            System.setSecurityManager(new RMISecurityManager());
        try {

            String url = "//localhost:" + 1099 + "/Sample";
            System.out.println("binding " + url);
            Naming.rebind(url, new Sample());
            // Naming.rebind("Sample", new Sample());
            System.out.println("server " + url + " is running...");
        }
        catch (Exception e) {
            System.out.println("Sample server failed:" + e.getMessage());
        }
    }
}
4

1 に答える 1