1

私は RMI テクノロジにまったく慣れていませんが、現実世界の分散アプリケーションを構築するための非常に重要なミドルウェア アーキテクチャであると考えるようになりました。クライアント プログラムをサーバー プログラムに接続する際に直面した課題が、このサイトにたどり着きました。以前に行ったコードでは、java.rmi.ConnectException ... 127.0.0.1 をホストできませんでした。実際には、これらのプログラムを最初にローカルで実行するつもりです。したがって、すべてのプログラムは同じコンピューターとフォルダーにあります。私のOSはwindows7です。

他のフォーラムから得た指示/アドバイスに従いましたが、エラーは解決しませんでした。私が従ったディレクティブには、サーバープログラムの実行時にrmi.server.hostnameプロパティを参照する1が含まれています

2 \etc フォルダーの下の hosts フォルダーを編集する

同じ例外が持続しました。RMI プログラムは、クライアントから呼び出された sayHello() メソッドによって出力される基本的な「Hello world」です。今、誰かが私に以下に示すコードを投稿しました。ホスト名、ポート番号、および文字列テキストを実行時パラメータとして渡してクライアント プログラムから接続しようとしましたが、今回持続した例外は java.rmi.UnknownHostException です。この問題をすべて解決して、より大きなプロジェクトを試してみたいと思います。感謝しています。誰かがすべての手がかりを与えることができれば。

オラクンレ オラディポ 鬼

     import java.rmi.*;

     public interface ReceiveMessageInterface extends Remote
     {


    void receiveMessage(String x) throws RemoteException;

 }

RmiServer.java

   import java.rmi.*;

    import java.rmi.registry.*;

    import java.rmi.server.*;

    import java.net.*;



   public class RmiServer extends java.rmi.server.UnicastRemoteObject

   implements ReceiveMessageInterface

    {

       int thisPort;

       String   thisAddress;

       Registry registry;    // rmi registry for lookup the remote objects.



    // This method is called from the remote client by the RMI.

    // This is the implementation of the �gReceiveMessageInterface�h.

       public void receiveMessage(String x) throws RemoteException
       {

        System.out.println(x);

       }
       public RmiServer() throws RemoteException
       {

         try
         {

            // get the address of this host.

            thisAddress= (InetAddress.getLocalHost()).toString();

         }
         catch(Exception e)
         {

            throw new RemoteException("can't get inet address.");

         }
         thisPort=1099;  // this port(registry�fs port)

         System.out.println("this address="+thisAddress+",port="+thisPort);

        try
        {

        // create the registry and bind the name and object.
         registry = LocateRegistry.createRegistry( thisPort );
         registry.rebind("rmiServer", this);
        }
        catch(RemoteException e)
        {

        throw e;

        }

    }
        static public void main(String args[])
        {

         try
         {
          RmiServer s=new RmiServer();
         }
         catch (Exception e) 
         {

           e.printStackTrace();

           System.exit(1);

         }

     }

}

RmiClient.java

import java.rmi.*;
import java.rmi.registry.*;
import java.net.*;

public class RmiClient
{
    static public void main(String args[])
    {
       ReceiveMessageInterface rmiServer;
       Registry registry;
       String serverAddress=args[0];
       String serverPort=args[1];
       String text=args[2];
       System.out.println("sending "+text+" to "+serverAddress+":"+serverPort);
       try
       {
       // get the �gregistry�h
         registry=LocateRegistry.getRegistry(serverAddress,
           (new Integer(serverPort)).intValue()
         );
       // look up the remote object
         jrmiServer=
          (ReceiveMessageInterface)(registry.lookup("rmiServer"));
       // call the remote method
       rmiServer.receiveMessage(text);
   }
   catch(RemoteException e){
       e.printStackTrace();
   }
   catch(NotBoundException e){
       e.printStackTrace();
   }


   }
}
4

0 に答える 0