程序员

java网络编程(一)

2019-01-09  本文已影响11人  RoundYuan

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();
        }
    }
}
上一篇下一篇

猜你喜欢

热点阅读