我正在JAVA中实现一个简单的RMI Server Client程序。我实际上是新手。我有四个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然后我使用此命令 rmic StackImp 这一切都成功了。但当我试图以这种方式运行注册表 rmiregistery 2000 时,命令提示符花了太长时间。没啥事儿。我在家里的电脑上做这一切。而这台PC不在网络上。请建议我如何成功使用此程序。
答案 0 :(得分:6)
命令提示符耗时太长。什么都没发生。
没有任何事情发生 - 注册表正在运行,您现在可以从另一个命令提示符启动服务器。
或者,如果您只在此计算机上运行一个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
命令,只需运行服务器(包括注册表),然后运行客户端(与服务器进程中运行的注册表进行通信)。