是不是有防火墙呢?因为RMI通讯并不是只使用你的2222端口,它会开启另外一个端口,除非你重写SocketFactory

解决方案 »

  1.   

    这是我写的一个初始化的方法 private void init(int port, String name) 
    throws RemoteException,MalformedURLException,IOException
    {
    if(!bInitRmiEnv){
    RMISocketFactory.setSocketFactory(new RMISocketFactory() {
        private ServerSocket socket = null;
        public Socket createSocket(String host, int _port) throws IOException {
            return new Socket(host, _port);
        }
        public ServerSocket createServerSocket(int _port) throws IOException {
            if(_port == 0)
                _port = getPort();
            if(socket==null)
                socket = new ServerSocket(_port);
            return socket;
        }
    });
    System.setSecurityManager(new RMISecurityManager() {
      public void checkListen(int port) {
          if(port!=getPort()&&port!=0)
              super.checkListen(port);
      }
      public void checkConnect(String host,int port) {}
      public void checkAccept(String host,int port) {}
    });
    LocateRegistry.createRegistry(port);
    bInitRmiEnv = true;
    }
    Naming.rebind(getUrl(), this);
    }
      

  2.   

    另外你需要指定一个参数启动的时候-Djava.rmi.server.hostname=218.22.29.243
      

  3.   

    谢谢 凤梨罐头,按照你的第二个方法
    启动的时候-Djava.rmi.server.hostname=218.22.29.243 就连接上了
    但java -Djava.rmi.server.hostname=218.22.29.243 hotel_rmi.RmiHelloServer&时,
    速度特别慢要好长时间,大概五分钟。而且一会这条进程就断了,不知道什么原因,有哪位大虾遇到此问题吗?怎么解决?
      

  4.   

    我想问一下你的注册表程序和你的SERVER是在一台机器上吗