你应该这样考虑,用户调用http://61.X.X.X 访问然后在服务器上再调用RMI这样才正确!如果你客户端直接调用10.X.X.X 上的RMI服务肯定会出问题的!

解决方案 »

  1.   

    那出错详细信息贴出来看看
    我估计是security的原因
      

  2.   

    你需要自己实现serversocketFactory和clientSocketFactory,在导出服务 的时候,把这它门作为构造参数,具体的你去看JDK文档,有比较详细的描述。
      

  3.   

    回复 pengji(彭乃超)先生:
        是啊,我现在遇到的问题就是说,这台服务器上并没有61.X.X.X这个地址,RMI服务只能绑定到 10.X.X.X 上,然而现在遇到的问题是:当客户端
    访问61.X.X.X 上的RMI服务时,经过地址映射到10.X.X.X(rmi://10.X.X.X/test/),报出的错误是:10.X.X.X 上的RMI服务没有启动!61.X.X.X上有什么,我自己都不知道,那是电信局给我做的IP映射。回复:woowindice(黑山老妖) 先生:
         不是安全策略的问题,在局域网里,我的程序很正常!谢谢!!回复: walkcamel(虫子) 先生:
         能再给我解释的详细一点吗??
      

  4.   

    你这样试试:
    server端:
          Door door = (Door)c.newInstance();
          door.setLocation("BeiDa");
          door.setOpen(true);
          System.out.println("*************");
          UnicastRemoteObject.exportObject(door);
          Registry reg = LocateRegistry.createRegistry(8000);
          reg.rebind("door1",door);
    client端:      Registry r = LocateRegistry.getRegistry(host(61.X.X.X),8000);      Door door = (Door)r.lookup("door1");
      

  5.   

    如果还不行请用createRegistry(int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) 
    自己实现RMIClientSocketFactory 和RMIServerSocketFactory
      

  6.   

    to godsmell (乐天)
      如你所说,希望Client对61.X.X.X的8000端口的访问被
    转到10.X.X.X的8000端口,而你并没61.X.X.X的控制权,
    当然还需要电信局增加61.X.X.X:8000到10.X.X.X:8000
    的映射才行。
      

  7.   

    不用那么麻烦的吧!你可以监听61.X.X.X的8000端口当有访问时通过SERVLET访问10.X.X.X的8000上的RMI服务不行吗!?
    你说的电性局给你做的映射我估计它是把地址映射到了INTERNET上的10.X.X.X上了!那台服务器上当然没有RMI服务啦!你要找到的是INTRANET上的10.X.X.X!
      

  8.   

    to pengji(彭乃超) :
      我无法监听61.X.X.X的8000端口,我只能在 10.X.X.X 的8000端口监听,
    因为本机的网卡的地址是10.X.X.X,是城市宽带介入所设置的城域网IP,
    现在通过任意客户端拨号上网,是PING不到 10.X.X.X的,为什么?因为这个
    地址是城域网的地址。本机没有的IP地址怎么能启动服务呢?这个道理就和
    新浪主机的WEB服务不能绑定网易的IP地址是一样的。
      拨号客户只能通过61.X.X.X来访问 10.X.X.X ,这是由电信来做的地址映射
    来完成的。现在我在10.X.X.X上绑定了RMI服务,希望拨号客户能从 61.X.X.X
    调用到它的RMI方法,但是实际应用中,RMI客户端程序告诉我说“10.X.X.X上的RMI服务没有启动!”,
    也就是说客户端能够通过IP映射访问到10.X.X.X这个地址,但是却找不到这个
    地址上的服务。
       我推测客户端在初次和服务器进行通讯以后,会收到服务器端发过来的IP
    (10.X.X.X),然后它就直接在INTENET上去找这个地址,而不是去访问 
    61.X.X.X了,这就是问题所在。请帮我想想该怎么解决???