美文网首页程序员
java网络编程(一)

java网络编程(一)

作者: RoundYuan | 来源:发表于2019-01-09 22:34 被阅读11次

    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();
            }
        }
    }
    

    相关文章

      网友评论

        本文标题:java网络编程(一)

        本文链接:https://www.haomeiwen.com/subject/vsmnrqtx.html