2012-05-10 7 views
1

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

Serverプログラム:

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) 

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

誰かがこの問題の解決に役立つことができます。私はこの問題を2日後に解決しようとしていましたが、使用しませんでした。私を助けてください!!

+0

クライアントとサーバーの間にネットワークデバイスがあり、接続が失敗する可能性がありますか? –

答えて

-1

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

+0

これは解決しません。彼のレジストリ検索はすでに明らかに成功しています。答えではありません。 – EJP

-1

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

+0

が正しくありません。 'LocateRegistry.createRegistry()'にポート番号を指定する必要があります。 'Registry.REGISTRY_PORT 'によって与えられるデフォルトの*値がありますが、あなたは' LocateRegistry.createRegistry() 'にそれを供給しなければなりません。そして、これは質問に答えません。彼の 'lookup()'は成功しました。失敗したメソッド呼び出し*です。 – EJP

関連する問題