0

RMIを使用するのはこれが初めてです。基本的に、次のRMIの例をPCでローカルに実行できますが、2台の別々のLinuxマシンを介して実行することはできません。

サーバーインターフェイス:

public interface PowerService extends Remote{
public BigInteger square ( int number )
    throws RemoteException;

public BigInteger power  ( int num1, int num2) 
    throws RemoteException;
}

サーバー:

public class PowerServiceServer extends UnicastRemoteObject implements
    PowerService {

public PowerServiceServer() throws RemoteException {
    super();
}

public BigInteger square(int number) throws RemoteException {
    imp .....
    return (bi);
}

public BigInteger power(int num1, int num2) throws RemoteException {
    imp .....
    return bi;
}

public static void main(String[] args) throws Exception {

    PowerServiceServer svr = new PowerServiceServer();
    // ... and bind it with the RMI Registry
    Naming.bind("PowerService", svr);
    System.out.println("Service bound....");
}
}

クライアント:

public class PowerServiceClient {
public static void main(String args[]) throws Exception {
    // Call registry for PowerService
    PowerService service = (PowerService) Naming.lookup("rmi://" + args[0]
            + "/PowerService");
    DataInputStream din = new DataInputStream(System.in);
    for (;;) {
        System.out.println("1 - Calculate square");
        System.out.println("2 - Calculate power");
        System.out.println("3 - Exit");
        System.out.println();
        System.out.print("Choice : ");

        String line = din.readLine();
        Integer choice = new Integer(line);

        int value = choice.intValue();

        switch (value) {
        case 1:
            // Call remote method
            ....................
            break;
        case 2:
            // Call remote method
            ....................
            break;
        case 3:
            System.exit(0);
        default:
            System.out.println("Invalid option");
            break;
        }
    }
}

クライアントインターフェイスはサーバーと同じです

これは、rmiの例を実行するために私が行ったことです。

1)サーバー側でスタブを作成しました

2)rmiregisrtyを実行します

3)サーバーを実行します

4)同じパッケージにサーバー側からクライアント側にスタブをコピーします

5)クライアントを実行します

クライアントを実行した後、次のエラーメッセージが表示されました。

スレッド"main"の例外java.rmi.ConnectException:ホストへの接続が拒否されました:127.0.0.1; ネストされた例外は次のとおりです。java.net.ConnectException:sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:198)のsun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:601)で接続が拒否されましたsun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:184)at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:110)atcompute.PowerServiceServer_Stub.square(不明なソース)

ファイアウォールが原因で接続できないか、何か問題が発生している可能性がありますか?

ありがとう

4

1 に答える 1

0

これは、java.rmi.server.hostname.RMIFAQの項目A.1を参照して対処される問題です。リモートオブジェクトをエクスポートする前に、それを引き起こす/ etc / hostsの設定ミスを修正するかjava.rmi.server.hostname、サーバーJVMのシステムプロパティをサーバーの正しいIPアドレスに設定する必要があります。

于 2013-01-10T20:28:25.010 に答える