3

単純なRMIサーバークライアントプログラムをJAVAに実装しています。私は実際にこれに不慣れです。私は4つのJavaファイルを持っています。

Stack.java

import java.rmi.*;

public interface Stack extends Remote{

public void push(int p) throws RemoteException;
public int pop() throws RemoteException;
}

StackImp.java

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

public class StackImp extends UnicastRemoteObject implements Stack{

private int tos, data[], size;

public StackImp()throws RemoteException{
    super();
}
public StackImp(int s)throws RemoteException{
    super();
    size = s;
    data = new int[size];
    tos=-1;     
}
public void push(int p)throws RemoteException{

    tos++;
    data[tos]=p;
}
public int pop()throws RemoteException{
    int temp = data[tos];
    tos--;
    return temp;
}

}

RMIServer.java

import java.rmi.*;
import java.io.*;


public class RMIServer{

public static void main(String[] argv) throws Exception{

    StackImp s = new StackImp(10);
    Naming.rebind("rmi://localhost:2000/xyz", s);
    System.out.println("RMI Server ready....");
    System.out.println("Waiting for Request...");   

}
}

RMIClient.java

import java.rmi.*;

public class RMIClient{

public static void main(String[] argv)throws Exception{

    Stack s = (Stack)Naming.lookup("rmi://localhost:2000/xyz"); 
    s.push(25);
    System.out.println("Push: "+s.push());

}
}

JDK1.5を使用しています。ファイルをコンパイルした順序は、最初にStack.javaをコンパイルし、次にStackImp.javaをコンパイルし、次にこのコマンドrmicStackImpを使用しました。これはすべて成功しました。しかし、この方法でレジストリを実行しようとすると、rmiregistery 2000で、コマンドプロンプトに時間がかかりすぎました。何も起こらなかった。私はこれをすべて自宅のPCで行っています。そして、このPCはネットワーク上にありません。このプログラムをうまく機能させるために何をすべきかを教えてください。

4

1 に答える 1

7

コマンドプロンプトに時間がかかりすぎました。何も起こらなかった。

何も起こらないはずです。レジストリが実行されているので、別のコマンドプロンプトからサーバーを起動できます。

または、このマシンで1つのRMIサーバープロセスのみを実行している場合は、RMIサーバーと同じプロセスでレジストリを実行できます。

import java.rmi.*;
import java.rmi.registry.*;
import java.io.*;


public class RMIServer{

  public static void main(String[] argv) throws Exception{

    StackImp s = new StackImp(10);
    Registry reg = LocateRegistry.createRegistry(2000);
    reg.rebind("xyz", s);
    System.out.println("RMI Server ready....");
    System.out.println("Waiting for Request...");   

  }
}

このように、個別のコマンドは必要ありませんrmiregistry。サーバー(レジストリを含む)を実行してから、クライアント(サーバープロセスで実行されているレジストリと通信する)を実行するだけです。

于 2013-01-14T18:18:40.037 に答える