import java.rmi.*; import java.rmi.registry.*; import java.rmi.server.*;public class rmi_server extends UnicastRemoteObject implements rmi_interface { public static void main(String args[]) { if (args.length!=2) { System.err.println("Syntax:Flip<true|false><port>"); System.err.println(); System.err.println("true demarcates to start RMI Regsitry,"+"false demarcates to bind to existing one."); System.err.println("port is the port # for Rmi Rgistry."); System.exit(-1); }
int port = new Integer (args[1]).intValue(); Registry reg =null; try {
if (args[0].equals("true")) { reg=LocateRegistry.createRegistry(port); System.out.println("Successfully created registry."); } else { reg=LocateRegistry.getRegistry(port); System.out.println("Connected to existing registry."); }
你的stub所存放的目录,所以,Client程序直接从classpath读入了
stub,而根本没有通过http/ftp/class server等方法传输,所以,
你把它放到实际环境中,当然就不行了。
建议你写具体些,启动rmiregistry的环境,classpath, 可用的传输方法,
命令行执行命令,security.policy都贴出来
这是 CLASSPATH
.;d:\j2sdk1.4.0\lib\dt.jar;d:\j2sdk1.4.0\lib\tools.jar;d;\j2sdkee1.3.1\lib\j2ee.jar;d:\jcifs-0.7.0b3.jar;D:\bea\wlserver6.1\lib\weblogic.jar;D:\bea\wlserver6.1\lib\mssqlserver4v65.jar;D:\j2sdk1.4.0\lib\fscontext.jar;可传输的方法 可以是 TCP/IP
security.policy:
java.security.AllPermissionimport java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.Naming;public class rmi_client
{
public static void main(String args[])
{
rmi_interface rmii=null;
if(args.length!=2)
{
System.err.println(
"Usage : rmi_server<host of rmi_server remote object><port>");
System.exit(-1);
}
try
{
System.setSecurityManager(new java.rmi.RMISecurityManager());
}
catch(java.rmi.RMISecurityException exc)
{
System.err.println("Security vertion " +exc.toString());
System.exit(-1);
}
try
{
String target="rmi://"+args[0]+":"+args[1]+"/rmi_server";
System.out.println("Attempting to connact " + target);
Remote reObject=Naming.lookup(target);
if (reObject instanceof rmi_interface)
{
rmii=(rmi_interface)reObject;
}
else
{
throw new Exception(
"Bad object return from remote machine");
}
}
catch(Exception e)
{
System.err.println("Error in lookup() "+e.toString());
System.exit(-1);
}
try
{
System.out.println(rmii.flip(5));
}
catch(RemoteException e)
{
System.err.println("Remote error: "+ e.toString());
}
}
}
import java.rmi.registry.*;
import java.rmi.server.*;public class rmi_server extends UnicastRemoteObject implements rmi_interface
{
public static void main(String args[])
{
if (args.length!=2)
{
System.err.println("Syntax:Flip<true|false><port>");
System.err.println();
System.err.println("true demarcates to start RMI Regsitry,"+"false demarcates to bind to existing one.");
System.err.println("port is the port # for Rmi Rgistry.");
System.exit(-1);
}
int port = new Integer (args[1]).intValue();
Registry reg =null;
try
{
if (args[0].equals("true"))
{
reg=LocateRegistry.createRegistry(port);
System.out.println("Successfully created registry.");
}
else
{
reg=LocateRegistry.getRegistry(port);
System.out.println("Connected to existing registry.");
}
rmi_server rmis=new rmi_server(reg);
}catch(Exception e)
{System.out.println(e.toString());}
}
public rmi_server(Registry reg)throws Exception,RemoteException
{
super();
reg.rebind("rmi_server",this);
System.out.println("rmi_server object bound.");
}
public int flip(int i) throws RemoteException
{
return i*-1;
}
}