我模拟了一个小程序 发现rmi服务器端的定义的接口,如果在客户端使用,客户端定义的接口必须与服务端的定义的接口放在同一样报名才可以吗?

解决方案 »

  1.   

    不能随便吧 我改了一下客户端的包名就抛java.rmi.UnmarshalException;java.lang.ClassNotFoundException 这两个异常。
      

  2.   

    我写的例子是这样的 服务端:
    package com.liu.project1;import java.io.IOException;
    import java.net.MalformedURLException;
    import java.rmi.Naming;
    import java.rmi.RemoteException;
    import java.rmi.registry.LocateRegistry;/**
     * 启动RMI服务器,导出服务对象
     * <一句话功能简述>
     * <功能详细描述>
      * @version  [版本号, Nov 11, 2010]
     * @see  [相关类/方法]
     * @since  [产品/模块版本]
     */
    public class StartRMIServer
    {
        public static void main(String args[]) 
        {
            int listerPort=8863; //设置RMI监听器在9911端口
            String serverIP="localhost"; //监听的IP
            String serviceObjName="service";//要导出的服务对象名字
               try
            {
                LocateRegistry.createRegistry(listerPort);
              //设置RMI服务器监听端口
                ImpService.setLog(System.out);//设置日志对象,打印到控制台
                ImpService remoteObj=new ImpService();//创建导出的对象,绑定服务
                Naming.rebind("rmi://"+serverIP+":"+listerPort+"/"+serviceObjName,remoteObj);
                System.out.println("RMI启动在"+serverIP+":"+listerPort+"服务名为:"+serviceObjName);
            }
            catch (RemoteException e)
            {
                e.printStackTrace();
            }
            catch (MalformedURLException e)
            {
                e.printStackTrace();
            } 
        }
    }
    客户端:
    package com.liu.project1;
    import java.net.MalformedURLException;
    import java.rmi.Naming;
    import java.rmi.NotBoundException;
    import java.rmi.RemoteException;public class RmiClient
    {
        public static void main(String[] args) 
        {
            int listerPort=8864;//设置RMI监听器在9911端口
            String serverIP="localhost";//监听的IP
            String serviceObjName="service";//要导出的服务对象名字
            InterfaceService stub;
           
                try
                {
                    stub = (InterfaceService)Naming.lookup("rmi://"+serverIP+":"+listerPort+"/"+serviceObjName);
                    for(int i=0;i<100;i++)
                    {
                        Object response=stub.service("请说话...."+i);
                        System.out.println("RMI服务器应答:"+response.toString());
                        Thread.sleep(1000);
                    }
                }
                catch (MalformedURLException e)
                {
                    e.printStackTrace();
                }
                catch (RemoteException e)
                {
                    e.printStackTrace();
                }
                catch (NotBoundException e)
                {
                    e.printStackTrace();
                }
                catch (InterruptedException e)
                {
                    e.printStackTrace();
                }
        }
    }
    接口是:InterfaceService;实现类:ImpService
      

  3.   

    我的包名一换客户端发送请求回报:java.rmi.UnmarshalException;java.lang.ClassNotFoundException 。异常抛出我也试了不行,看看各位大虾能否帮忙看看。