我正在尝试测试 java 的 RMI,但我无法让 rmic 命令工作。
请告诉您是否需要我的代码,尽管我很确定这并不重要,但我已经正确实现了 RMI 功能。
服务器端代码:
public static void main(String[] args)
{
try {
Registry r = LocateRegistry.getRegistry();
r.bind("RService", new RSimpl());
}
catch (Exception ex) {
ex.printStackTrace();
System.out.println("Cannot Start Remote Service");
}
System.out.println("Remote Service Is Running");
}
客户端代码:
@SuppressWarnings("deprecation")
public Object[] getServiceList()
{
boolean connectionsuccess = false;
Object[] objList = null;
try {
System.setSecurityManager(new RMISecurityManager());
server = (RemoteService) Naming.lookup("rmi://192.168.1.77/RService");
connectionsuccess = true;
}
catch(Exception ex) {
Object[] options = {"Retry","Cancel"};
int o = JOptionPane.showOptionDialog(frame, "Cannot Establish Connection To The Server. \n Do You Want To Retry?", "Connection Error", JOptionPane.YES_NO_OPTION, JOptionPane.ERROR_MESSAGE, null, options, options[0]);
if(o==0)
{
i=0;
attemptConnect();
}
else
{
i=1;
return error;
}
}
}
RSimpl.java:
package testrmi;
import java.rmi.*;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.*;
import java.util.*;
public class RSimpl extends UnicastRemoteObject implements RemoteService {
HashMap map;
public RSimpl() throws RemoteException
{
setUpServices();
}
public void setUpServices()
{
map = new HashMap();
map.put("Dice Roll Service", new DiceRoll());
map.put("Calculator Service", new Calculator());
// Keep Adding Services On The Go!
}
public Object[] getServiceList()
{
return map.keySet().toArray();
}
public Service getService(Object SvcKey)
{
Service theService = (Service) map.get(SvcKey);
return theService;
}
public static void main(String[] args)
{
try {
Registry r = LocateRegistry.getRegistry();
r.bind("RService", new RSimpl());
}
catch (Exception ex) {
ex.printStackTrace();
System.out.println("Cannot Start Remote Service");
}
System.out.println("Remote Service Is Running");
}
}
RemoteService.java(接口):
package testrmi;
import java.rmi.*;
public interface RemoteService extends Remote {
public Object[] getServiceList() throws RemoteException;
public Service getService(Object SvcKey) throws RemoteException;
}