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

2019-08-18 03:10发布

    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地址。 我也试图把本地主机的服务器,但误差不会改变。

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

任何建议可能是什么?

Answer 1:

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



Answer 2:

问题解决了

有我一模一样的错误。 当远程对象得到了绑定到rmiregistry它附有与回送的IP地址,如果你试图从远程地址调用一个方法,这将明显失败。 为了解决这个问题,我们需要java.rmi.server.hostname属性设置为IP地址,而其他设备可通过网络到达你的rmir​​egistry的。 当您尝试通过JVM来设置参数这是行不通的。 它的工作对我来说只是刚刚绑定对象到rmir​​egistry之前添加下面一行到我的代码:

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

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



Answer 3:

我发现很多的Q&A关于这个主题的,没有什么是帮助我 - 这是因为我的问题是更基本的(我可以说我不是大师网:))。 在/ etc我的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

我的问题是,我曾在几个月前改变了我的IP地址,但从来没有更新我的/ etc / hosts文件。 它似乎在默认情况下JConsole的使用主机名-i IP地址以某种方式即使我观看本地进程。 最好的解决办法是简单地将/ etc / hosts文件。

可合作的其他解决方案是从/ sbin目录/使用ifconfig得到您的正确的IP地址,并在指定IP地址时,例如使用的IP地址,一个catalina.sh脚本:

-Djava.rmi.server.hostname=A.B.C.D


Answer 4:

您可以使用LocalRegistry如:

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



Answer 5:

也许你不rmiregistry的客户端之前创建试图连接到服务器,它会导致这种exception.In Linux,你可以使用“netstat”查看您的rmiregistry的是你在Java代码中指派了正确的端口上的债券。



Answer 6:

如果你已经尝试修改etc / hosts文件,加入java.rmi.server.hostname属性以及,但仍注册表正被绑定到127.0.0.1

对我来说,问题是后通过代码明确设置系统属性尽管是同一财产没有从JVM ARGS采摘解决



Answer 7:

如果你在Linux环境下运行,打开文件/etc/hosts.allow添加以下行

ALL

通配符

同时检查/etc/hostname/etc/host ,看看是否有可能是一个错误的存在。

我不得不改变我/ etc / host

127.0.0.1 localhost
127.0.1.1 AMK

127.0.0.1 localhost
127.0.0.1 AMK

也写在ALL在文件/etc/hosts.allow这在以前是完全空

现在一切正常

不知道它是多么安全。 你必须了解更多有关可能的选项/etc/hosts.allow做一些事情,需要触摸的安全性。



Answer 8:

我有完全相同的问题,我的问题是,我有2个不同的网络,2个IP地址在etc / hosts中配置如下。

10.xxx.x.xxx    localhost
192.xxx.x.xxx   localhost

这应该是因为有冲突作为其使用IP的其他设备,达到在网络上rmiregistry中。

一旦我删除不需要额外的记录,我是能够解决的问题,

所以,我的etc / hosts文件只有以下记录。

10.xxx.x.xxx    localhost


Answer 9:

它在/ etc / hosts中摆脱的“:: 1”之后对我的作品。



Answer 10:

在Windows确保您的Windows防火墙正确配置/禁用。 我不得不禁用Windows防火墙得到的东西,甚至在工作的时候与本地主机测试(因为我没有与配置理会它)。



Answer 11:

当你想连接到使用RMI远程服务器必须添加系统属性相同:

System.setProperty("java.rmi.server.hostname","Ip or DNS of the server");

或添加环境变量。

对我来说,我得到了连接被拒绝 ,并通过加入这一行的在服务器端代码解决这个问题:

 java -jar -Djava.rmi.server.hostname="ip or dns of the server" packageName.jar

感谢给其他人用于指导我解决这个问题。



文章来源: java.rmi.ConnectException: Connection refused to host: 127.0.1.1;