1

1つのRMIプログラムを実行しようとしていますが、RMIクライアントプログラムからリモートメソッドを呼び出そうとすると例外が発生します。

サーバープログラム:

import java.rmi.*;
import java.rmi.registry.*;
import java.rmi.server.*;


public class Hello extends UnicastRemoteObject implements HelloInterface {

    private String message;

    public Hello() throws RemoteException{
           int port=1024; 
          Registry registry;
           try{
              registry = LocateRegistry.createRegistry(port);
              registry.rebind("samplermi", this);
              System.out.println ("Server started and listening on port " + port);

          }
          catch(RemoteException e){
              System.out.println("remote exception"+ e);
          }
      }

      public String sayHi (String name) throws RemoteException {
          message = "Hi .. Welcome " + name;
      return message;
      }


      public static  void main(String args[]){
          try{
              Hello serverObj = new Hello();
          }
          catch (Exception e){
          e.printStackTrace();
          System.exit(1);
          }
          }


}

クライアントプログラム:

registry=LocateRegistry.getRegistry(serverAddress,serverPort);
          if(registry !=null){
               String[] availRemoteServices = registry.list();
              for(int i=0;i<availRemoteServices.length;i++){
                  System.out.println("Service " + i + ": " +availRemoteServices[i]);                  
              }           
          }
           rmiServer=(HelloInterface)(registry.lookup("samplermi"));

          System.out.println("calling remote method!");
          // call the remote method
          welcomeMsg = rmiServer.sayHi(text);
      System.out.println("Message from server: " + welcomeMsg);

リモートメソッドsayHIを呼び出したときにのみ接続例外が発生します。サービス名の検索と一覧表示には問題なく機能します。

R:\Deptapps\itdm\Sample_RMI>java NewSampleRMIClient
Getting Registry Object from server!!
Registry Object Created!!
Service 0: samplermi
Services listed successfully!

Look up successful!
calling remote method!

java.rmi.ConnectException: Connection refused to host; nested exception is:
        java.net.ConnectException: Connection timed out: connect
        at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source)
        at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source)
        at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source)
        at sun.rmi.server.UnicastRef.invoke(Unknown Source)
        at Hello_Stub.sayHi(Unknown Source)
        at NewSampleRMIClient.main(NewSampleRMIClient.java:42)
Caused by: java.net.ConnectException: Connection timed out: connect
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.PlainSocketImpl.doConnect(Unknown Source)
        at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
        at java.net.PlainSocketImpl.connect(Unknown Source)
        at java.net.SocksSocketImpl.connect(Unknown Source)

注:solarisでサーバーを実行し、Windowsからクライアントを実行している場合、同じプログラムが正しく機能しています。これは、AIXでサーバーを実行し、Windowsからクライアントを実行している場合にのみ機能しません。

誰かがこの問題の解決を手伝ってくれると親切です。私は2日からこの問題を修正しようとしていますが、役に立たないです。私を助けてください!!

4

3 に答える 3

0

これについては、RMI FAQ の項目 A.1 で説明されています。

于 2012-05-11T05:07:52.337 に答える
-1

RMi はデフォルトのポート 1099 で作業しています。したがって、ポートを作成する必要はありません。デフォルトのポート番号を使用している場合、例外が発生しない場合があります。プログラムが正常に動作する可能性があります。

于 2013-05-22T05:24:48.380 に答える
-1

実行rmiregistry.exeする前に実行するHello.classと、問題が解決しました。

于 2012-05-27T18:02:22.283 に答える