首先注意我是在Linux环境下。
客户端(192.168.1.5)与服务器端(192.168.1.6)是两台机器。
从客户端 telnet 192.168.1.6 5001是通的。服务器端启用了 rmi://127.0.0.15001/SendInfo服务(注:如果是服务器端本机调用本机的这个服务是正常的)而客户端调用服务器端的这个rmi://192.168.1.6/SendInfo出现如下错误。
java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is:
        java.net.ConnectException: Connection refused: connect
java.net.ConnectException: Connection refused: connect
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:320)
        at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:133)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:120)
        at java.net.Socket.<init>(Socket.java:273)
        at java.net.Socket.<init>(Socket.java:100)
        at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:25)
        at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:120)
        at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:499)
        at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:190)
        at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:174)
        at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:83)
        at my.package.MyRemoteInterfaceImpl_Stub.myRemoteMethod(Unknown Source)
从网上找些方面是将服务器端的hostname 映射真实ip。我试过。linux不能成功,其它的不确定。
我也试过在服务器端硬编码System.setProperty("rmi.server.hostname","服务器ip"),也没成功!
也尝试过在服务器端原先设的127.0.0.1更改为服务器的真实ip也没成功。。求助!!!!!!!

解决方案 »

  1.   

    上面的我的地址打错了。
    修正:服务器端:rmi://127.0.0.1:5001/SendInfo客户端调用地址:rmi://192.168.1.6:5001/SendInfo
    请高手教助解决。谢谢!
      

  2.   

    答:
    1)服务器端远程对象导出时,向RmiRegistry注册时,使用: rmi://192.168.1.6:5001/SendInfo 
    2)客户端的权限(策略文件中)要设置允许访问该IP与PORT.
    试试
      

  3.   

    1.修改java的策略文件java.policy
    2.将RMI服务器上的/etc/hosts文件中的 localhost一行的127.0.0.1改成真实IP 192.168.1.6 试试
    3.查看防火墙设置