RMI之由浅入深(一) (2)

2、这个对应数据流中的Call消息;

RMI之由浅入深(一)

3、然后Registry返回⼀个序列化的数据,这个就是找到的Name=Hello的对象,这个对应数据流中的ReturnData消息;

RMI之由浅入深(一)

4、客户端反序列化该对象,发现该对象是⼀个远程对象,地址在 169.254.20.76:39098 ,这边可能会有疑问,这里面没有,怎么会知道端口号啥的

RMI之由浅入深(一)


可以看出,其实端口是跟在远程地址的后面,只不过是16进制的,需要切换一下

RMI之由浅入深(一)

5、于是再与这个地址建⽴TCP连接;在这个新的连接中,才执⾏真正远程⽅法调⽤,也就是 hello()

RMI之由浅入深(一)

0x03、rmi测试代码

RMIDemo.java

import java.rmi.Remote; import java.rmi.RemoteException; public interface rmiDemo extends Remote { public String hello() throws RemoteException; }

RMIDemoImpl.java

import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; public class RMIDemoImpl extends UnicastRemoteObject implements rmiDemo{ protected RMIDemoImpl() throws RemoteException { System.out.println("构造方法"); } public String hello() throws RemoteException { System.out.println("hello方法被调用"); return "hello,world"; } }

RMIServer.java

import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; public class RMIServer { public static void main(String[] args) throws RemoteException { rmiDemo hello = new RemoteHelloWorld();//创建远程对象 Registry registry = LocateRegistry.createRegistry(1099);//创建注册表 registry.rebind("hello",hello);//将远程对象注册到注册表里面,并且设置值为hello } }

RMIClient.java

import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; public class RMIServer { public static void main(String[] args) throws RemoteException { rmiDemo hello = new RemoteHelloWorld();//创建远程对象 Registry registry = LocateRegistry.createRegistry(1099);//创建注册表 registry.rebind("hello",hello);//将远程对象注册到注册表里面,并且设置值为hello } } 网上参考学习,如若有错,请各位大佬指出

RMI之由浅入深(一)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpzsgp.html