java.rmi.ConnectException:连接拒绝主机:127.0.1.1;

ant*_*boa 42 java connection rmi exception remoteobject

    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
Run Code Online (Sandbox Code Playgroud)

当我尝试将远程客户端连接到服务器时,我收到此异常.在服务器和客户端中,rmi的registryUrl的hostName是服务器的公共IP地址.我也尝试将localhost放在服务器中,但错误不会改变.

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

有什么建议吗?

use*_*421 33

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

  • 拜托,你是怎么解决这个问题的?我尝试使用:java HelloServer -Djava.rmi.server.hostname = 192.168.1.5但客户端无法找到服务器java.rmi.ConnectException:Connection拒绝主机:127.0.1.1; 嵌套异常是:java.net.ConnectException:Connexionrefusée (5认同)
  • @PatrickBucher 你提到的人只提出了一个问题。你应该感谢的是我。 (2认同)

Ray*_*dez 15

问题解决了

我有完全相同的错误.当远程对象绑定到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.

  • 当你'尝试通过JVM'设置参数时它**可以工作,你可能意味着在命令行上.如果使用`System.setProperty()`,则必须在导出远程对象之前设置它,而不是在绑定之前. (4认同)

Pau*_*aul 7

我发现了许多关于这个主题的问答,并没有什么能帮助我 - 那是因为我的问题更基本(我能说什么我不是网络大师:)).我在/ etc/hosts中的IP地址不正确.我尝试过的包括CATALINA_OPTS的以下内容:

CATALINA_OPTS="$CATALINA_OPTS -Djava.awt.headless=true -Xmx128M -server 
-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port=7091 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=A.B.C.D"  #howeverI put the wrong ip here!

export CATALINA_OPTS
Run Code Online (Sandbox Code Playgroud)

我的问题是我几个月前更改了我的IP地址,但从未更新我的/ etc/hosts文件.似乎默认情况下,即使我正在查看本地进程,jconsole也会以某种方式使用主机名-i ip地址.最好的解决方案是简单地更改/ etc/hosts文件.

另一个可以工作的解决方案是从/ sbin/ifconfig获取正确的IP地址,并在指定IP地址时使用该IP地址,例如catalina.sh脚本:

-Djava.rmi.server.hostname=A.B.C.D
Run Code Online (Sandbox Code Playgroud)


小智 7

您可以使用LocalRegistry,例如:

Registry rgsty = LocateRegistry.createRegistry(1888); rgsty.rebind("hello", hello);