私は 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();
}
}
}