java网络编程(一)
RMI(远程方法调用)
RMI概要:
RMI 远程方法调用是计算机之间通过网络实现对象调用的一种通讯机制。
过去,TCP/IP通讯是远程通讯的主要手段,面向过程的开发。
而RPC使程序员更容易地调用远程程序,但在面对复杂的信息传讯时,RPC依然
未能很好的支持,RMI被设计成面向对象开发模式,允许程序员使用远程对象来实现通信
RMI远程调用步骤:
1,客户调用客户端辅助对象stub上的方法
2,客户端辅助对象stub打包调用信息(变量,方法名),通过网络发送给服务端辅助对象skeleton
3,服务端辅助对象skeleton将客户端辅助对象发送来的信息解包,找出真正被调用的方法以及该方法所在对象
4,调用真正服务对象上的真正方法,并将结果返回给服务端辅助对象skeleton
5,服务端辅助对象将结果打包,发送给客户端辅助对象stub
6,客户端辅助对象将返回值解包,返回给调用者
7,客户获得返回值
代码实现:
1、制作远程接口:接口文件 (返回的参数必须是可序列化的)
2、远程接口的实现:Service文件
3、RMI服务端注册,开启服务
4、RMI代理端通过RMI查询到服务端,建立联系,通过接口调用远程方法
MyRemote.java 1
public interface MyRemote extends Remote{
public String sayHello() throws RemoteException;
}
MyRemoteImpl 2,3
public class MyRemoteImpl extends UnicastRemoteObject implements MyRemote {
protected MyRemoteImpl() throws RemoteException {
super();
}
@Override
public String sayHello() throws RemoteException {
return "HelloWord";
}
public static void main(String[] args) {
try {
MyRemote service = new MyRemoteImpl();
LocateRegistry.createRegistry(6600);
Naming.rebind("rmi://localhost:6600/RemoteHello", service);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println(e.toString());
}
}
}
MyRemoteClient.java 4
public class MyRemoteClient {
public static void main(String[] args) {
new MyRemoteClient().go();
}
public void go()
{
try {
MyRemote service=(MyRemote) Naming.lookup("rmi://127.0.0.1:6600/RemoteHello");
String s=service.sayHello();
System.out.println(s);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
网友评论