小弟需要了解RMI的详细远程调用机制?有例子最好。
       望 路过的,走过的帮帮忙。

解决方案 »

  1.   

    我也准备看rmi,现在也是没有例子
      

  2.   

    RMI是使用是tcp/ip协议来实现的。
    如果你要了解的清楚,请查看http://java.sun.com/developer/onlineTraining/rmi/RMI.html#IntroRMI
      

  3.   

    http://hi.baidu.com/ma2ma3/blog/item/7326efdea887045494ee37e4.html
    希望能给你有帮助.
      

  4.   

    1.定义远程接口:import java.rmi.*;
    import java.rmi.server.*;public interface AddServer extends Remote
    {
        public int addData(int a,int b) throws RemoteException;
    }2.实现服务器类的远程接口:import java.rmi.*;
    import java.rmi.server.UnicastRemoteObject;public class AddServerImpl
    {
        public AddServerImpl()
        {
            
        }
        
        public static void main(String args[])
        {
            System.setSecurityManager(new RMISecurityManager());
            
            try
            {
                Data data=new Data();
                Naming.rebind("AddData",data);
                System.out.println("Server Registered");
            }
            catch(Exception e)
            {
                System.out.println(e.toString());
            }
        }
    }class Data extends UnicastRemoteObject implements AddServer
    {
        public Data() throws RemoteException
        {
            super();
        }
        
        public int addData(int a,int b)
        {
            return a+b;
        }
    }3.调用远程方法:import java.rmi.*;
    import java.rmi.server.*;
    import java.io.*;public class AddServerClient
    {
        public static void main(String args[])
        {
            String readString,readString1;
            int num1,num2;
            InputStreamReader inputReader=new InputStreamReader(System.in);
            BufferedReader bufferStream=new BufferedReader(inputReader);
            
            try
            {
                System.out.println("Please enter first number : ");
                System.out.flush();
                readString=bufferStream.readLine();
                num1=Integer.parseInt(readString);
                
                System.out.println("Please enter second number : ");
                System.out.flush();
                readString1=bufferStream.readLine();
                num2=Integer.parseInt(readString1);
                
                AddServer server=(AddServer)Naming.lookup("AddData");
                int res=server.addData(num1,num2);
                
                System.out.println("Result is" +res);
            }
            catch(Exception e)
            {
                System.out.println(e.toString());
            }
        }
    }4.调试方法:
    先编译所有的java文件 javac *.java
    rmic AddServerImpl 生成Stub和Skeleton
    (注意文件权限的问题,安全策略)
    启动远程对象注册:start rmiregistry
    启动服务器:java AddServerImpl
    启动客户:java AddServerClient
      

  5.   

    这是基于stub/skeleton模型。
    客户端首先获得服务端对象的引用,将其要调用的方法和参数打包,通过网络传送给服务端(所以需要序列化对象)。服务端解析参数,调用方法,将结果打包,返回给客户端。
    所以我们看到的客户端好像是在本机调用方法一样!
      

  6.   

    没有研究过,不过让我实现的话,会使用JAVA序列化机制,所以我想rmi既然只是java之间的调用,相比也是使用序列化实现的吧,毕竟这样最简单了