java远程调用
来源:互联网 发布:淘宝规则在哪里查看 编辑:程序博客网 时间:2024/06/05 20:57
1 编写服务端
服务端工程是RmiServer,接口如下,注意两点,一个是一定要继承Remote的父类,另外是远程调用的方法一定要抛出RemoteException的异常。
package cn.server;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface ITimeServer extends Remote{
public long getServerTime() throws RemoteException ;
}
服务端的实现类实现ITimeServer接口,并继承UnicastRemoteObject的父类,有两点要注意,一个是要有显示的构造方法并抛出RemoteException 异常,另外一个是远程调用的方法要抛出RemoteException 异常。
package cn.server;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class ITimeServerImpl extends UnicastRemoteObject implements ITimeServer {
private static final long serialVersionUID = 8221409097017900253L;
protected ITimeServerImpl() throws RemoteException {
super();
}
@Override
public long getServerTime() throws RemoteException {
return System.currentTimeMillis();
}
}
要生成远程调用的class,进入cmd命令,进入该class的目录下,输入rmic 命令即可
可以看到生成stub的class,这个是远程的class
编写服务启动程序
package cn.server;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
public class StartServer {
public static void main(String[] args) {
try {
//start rmiregistry
ITimeServerImpl timeServer=new ITimeServerImpl();
Naming.rebind("rmi://localhost:1099/timeServer", timeServer);
System.out.print("Ready");
} catch (Exception e) {
e.printStackTrace();
}
}
}
启动注册注册表服务,默认是1099端口,如果不启动注册表服务,上面的mian运行会报错。
运行服务端的main方法,该服务运行成功。
如果不想用命令的方式启动注册表服务,需要在main方法加入LocateRegistry.createRegistry(1099);这句话会动态启动注册表服务。
编写客户端RmiClient工程,注意接口一定要和服务端的接口在同一个包下面,同样的接口名
package cn.server;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface ITimeServer extends Remote{
public long getServerTime() throws RemoteException ;
}
客户端调用远程服务端的方法
package cn.client;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import cn.server.ITimeServer;
public class Client {
public static void main(String[] args) {
ITimeServer iTimeServer;
try {
iTimeServer = (ITimeServer) Naming.lookup("rmi://localhost:1099/timeServer");
System.out.println(iTimeServer.getServerTime());
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
} catch (NotBoundException e) {
e.printStackTrace();
}
}
}
该地址,是服务端注册的地址。
运行该程序,结果如下。
- Java远程方法调用
- Java远程方法调用
- Java远程方法调用
- Java远程方法调用
- java中的远程调用
- Java远程方法调用
- JAVA的远程调用
- Java rmi 远程调用
- Java远程方法调用
- Java的远程调用
- JAVA RMI 远程调用
- java--- RMI远程调用
- Java 远程方法调用
- JAVA的远程调用
- Java的远程调用
- Java rmi 远程调用
- Java远程方法调用
- java 远程方法调用
- D - Magic Powder - 1 codeforces 670d1
- android开发中即时聊天软件中时间的获得
- C++ Primer 学习笔记_94_用来大型程序的工具 -命名空间[续3]
- Struts2中Action接收参数的方法
- linux下解压命令大全
- java远程调用
- C++ Primer 学习笔记_95_用来大型程序的工具 -多重继承与虚继承
- 关于UIScrollView的约束问题
- 最保险的函数间数组作为参数值传递与返回方法,用memcpy函数!
- ZooKeeper分布式过程协同技术详解
- Oracle查询死锁及处理方法
- C++ Primer 学习笔记_96_用以大型程序的工具 -多重继承与虚继承[续1]
- C++ Primer 学习笔记_97_用来大型程序的工具 -多重继承与虚继承[续2]
- 230. Kth Smallest Element in a BST