Java 需要帮助更好地理解RMI吗
我正在学习RMI,我做了如下工作:Java 需要帮助更好地理解RMI吗,java,rmi,Java,Rmi,我正在学习RMI,我做了如下工作: 接口 import java.rmi.*; public interface IRemote extends Remote { public void say() throws RemoteException; } 服务器 import java.rmi.*; import java.rmi.server.*; public class Server extends UnicastRemoteObject implements IRemot
接口
import java.rmi.*;
public interface IRemote extends Remote {
public void say() throws RemoteException;
}
服务器
import java.rmi.*;
import java.rmi.server.*;
public class Server extends UnicastRemoteObject implements IRemote{
public Server() throws RemoteException{}
public void say() throws RemoteException{
System.out.println("I am saying Hello World...");
}
public static void main (String[] argv) {
try {
Naming.rebind ("myserver", new Server());
System.out.println ("Server is ready.");
} catch (Exception e) {
System.out.println ("Hello Server failed: " + e);
}
}
}
客户端
import java.rmi.*;
class Client{
public static void main(String args[]){
try{
IRemote obj = (IRemote) Naming.lookup ("rmi://MYPCNAME/myserver");
obj.say();
}catch(Exception e){
System.out.println("Exception : "+e);
}
}
}
为了运行,我首先启动RMI注册表
启动注册表
然后java服务器
然后java客户端
import java.rmi.*;
class Client{
public static void main(String args[]){
try{
IRemote obj = (IRemote) Naming.lookup ("rmi://MYPCNAME/myserver");
obj.say();
}catch(Exception e){
System.out.println("Exception : "+e);
}
}
}
当我把这三样东西放在同一个包里的时候,这个东西很好用。但这不是RMI的全部内容。我应该能够将客户机放在其他机器或其他位置,然后从那里调用服务器方法
但是当我更改Client.java的包并尝试编译它时,我得到了错误:
Client.java:6:错误:找不到符号
IRemote obj=(IRemote)Naming.lookup(“rmi://MYPCNAME/myserver");代码>
symbol:class IRemote
位置:类客户端
import java.rmi.*;
class Client{
public static void main(String args[]){
try{
IRemote obj = (IRemote) Naming.lookup ("rmi://MYPCNAME/myserver");
obj.say();
}catch(Exception e){
System.out.println("Exception : "+e);
}
}
}
它说它找不到IRemote,它存在于服务器的包中。我想知道,我怎样才能使这东西正常工作?客户端和服务器都在不同的软件包或机器上?我怀疑问题在于缺少import
语句
当客户端
与IRemote
位于同一个包中时,您无需导入即可引用它。一旦你移动了接口,你的客户端
类就不知道如何找到它了。好吧,我很清楚。。。!但是,当我们将客户机程序移动到另一台机器和另一台机器上的服务器时,会发生什么呢?那个么你们认为你们将如何导入这个接口呢?(RMI的全部内容)将您的接口打包到一个JAR中,然后针对该JAR编译您的客户机和服务器。您想说,我们确实需要双方的接口吗?客户端和服务器端?不,两边都需要接口。没关系!:)你确定这件事吗?在标准的JavaRMI工作方式中,接口应该在双方都可用吗?有推荐人吗?