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(不明なソース)
ファイアウォールが原因で接続できないか、何か問題が発生している可能性がありますか?
ありがとう