高手进!JAVA中实现RMI必须得把所有CLASS文件放到一个包里么?

今天我看了一个教程,客户端和服务期端文件都是放到一个包里了。要是放到两个包里就找不到类了,因为客户端新建的对象是服务期端的类啊。要是用两台机器的话那该怎么做呢?代码如下:... 今天我看了一个教程,客户端和服务期端文件都是放到一个包里了。要是放到两个包里就找不到类了,因为客户端新建的对象是服务期端的类啊。要是用两台机器的话那该怎么做呢?

代码如下:
接口:
import java.rmi.Remote;

public interface Calculator extends Remote
{
public long add(long a, long b)
throws java.rmi.RemoteException;

public long sub(long a, long b)
throws java.rmi.RemoteException;

public long mul(long a, long b)
throws java.rmi.RemoteException;

public long div(long a, long b)
throws java.rmi.RemoteException;
}
实现:
import java.rmi.server.UnicastRemoteObject

public class CalculatorImpl extends UnicastRemoteObject implements Calculator
{

// 这个实现必须有一个显式的构造函数,并且要抛出一个RemoteException异常
public CalculatorImpl()
throws java.rmi.RemoteException {
super();
}

public long add(long a, long b)
throws java.rmi.RemoteException {
return a + b;
}

public long sub(long a, long b)
throws java.rmi.RemoteException {
return a - b;
}

public long mul(long a, long b)
throws java.rmi.RemoteException {
return a * b;
}

public long div(long a, long b)
throws java.rmi.RemoteException {
return a / b;
}
}
服务期代码:
import java.rmi.Naming;

public class CalculatorServer {

public CalculatorServer() {
try {
Calculator c = new CalculatorImpl();
Naming.rebind("rmi://localhost:1099/CalculatorService", c);
} catch (Exception e) {
System.out.println("Trouble: " + e);
}
}

public static void main(String args[]) {
new CalculatorServer();
}
}
客户端代码:
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.net.MalformedURLException;
import java.rmi.NotBoundException;

public class CalculatorClient {

public static void main(String[] args) {
try {
Calculator c = (Calculator)
Naming.lookup(
"rmi://localhost
/CalculatorService");
System.out.println( c.sub(4, 3) );
System.out.println( c.add(4, 5) );
System.out.println( c.mul(3, 6) );
System.out.println( c.div(9, 3) );
}
由于字数所限,catch块去掉了
展开
 我来答
triceratops
2007-05-14 · TA获得超过155个赞
知道小有建树答主
回答量:46
采纳率:100%
帮助的人:43.6万
展开全部
首先你得用jdk的rmic命令为你的实现类CalculatorImpl生成存根和框架,将接口,实现类,框架和服务端代码的类放在一个包里;将接口,实现类,存根和客户端的类放在另一个包里(甚至可以在另一台host上);在命令行启动rmiregistry命令,再打开两个命令行窗口,先启动服务器程序,再在另一个窗口启动客户端程序。运行肯定没有问题的,不一定非要在一个包中,那样还叫什么远程访问啊!
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式