java.rmi.ConnectException:连接拒绝托管:127.0.1.1;

新手上路,请多包涵
    java.rmi.ConnectException: Connection refused to host: 127.0.1.1; nested exception is:
    java.net.ConnectException: Connection refused
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:619)
    at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216)
    at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202)
    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:128)
    at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:194)
    at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:148)
    at com.sun.proxy.$Proxy0.notifyMe(Unknown Source)
    at CallbackServerImpl.doCallback(CallbackServerImpl.java:149)
    at CallbackServerImpl.registerForCallback(CallbackServerImpl.java:70)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:322)
    at sun.rmi.transport.Transport$1.run(Transport.java:177)
    at sun.rmi.transport.Transport$1.run(Transport.java:174)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:173)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:553)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:808)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:667)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:722)
    Caused by: java.net.ConnectException: Connection refused
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
    at java.net.Socket.connect(Socket.java:579)
    at java.net.Socket.connect(Socket.java:528)
    at java.net.Socket.<init>(Socket.java:425)
    at java.net.Socket.<init>(Socket.java:208)
    at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:40)
    at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:146)
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:613)
    ... 23 more

当我尝试将远程客户端连接到我的服务器时出现此异常。在服务器和客户端中,rmi 的 registryUrl 的主机名是服务器的公共 IP 地址。我还尝试将 localhost 放入服务器,但错误没有改变。

我的 java.policy 设置为授予所有端口的所有连接,并且我没有在服务器或客户端中启用防火墙。

任何建议可能是什么?

原文由 heythatsmekri 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 736
2 个回答

这是 RMI FAQ 中的 A.1 项。您需要修复 /etc/hosts 文件或在服务器上设置 java.rmi.server.hostname 属性。

原文由 user207421 发布,翻译遵循 CC BY-SA 3.0 许可协议

问题解决了

我有完全相同的错误。当远程对象绑定到 rmiregistry 时,它附加了环回 IP 地址,如果您尝试从远程地址调用方法,这显然会失败。为了解决这个问题,我们需要将 java.rmi.server.hostname 属性设置为其他设备可以通过网络访问您的 rmiregistry 的 IP 地址。当您尝试通过 JVM 设置参数时,它不起作用。只需在将对象绑定到 rmiregistry 之前将以下行添加到我的代码中, 它就 对我有用:

System.setProperty("java.rmi.server.hostname","192.168.1.2");

在这种情况下,在 RMI 注册表上绑定远程对象的 PC 的本地网络上的 IP 地址是 192.168.1.2。

原文由 Raydelto Hernandez 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题