java.rmi.ConnectException: 连接被拒绝,无法连接到主机:127.0.1.1;

58
    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的hostName都是服务器的公共IP地址。我还尝试在服务器中放置localhost,但错误仍未改变。

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

有什么建议吗?

15个回答

0

IntelliJ

我在IntelliJ的VM选项中使用了这些标志来启用仅支持IPv6,导致了这个错误:

java.lang.RuntimeException: java.rmi.ConnectException: Connection refused to host: ::1; nested exception is: java.net.ConnectException: Connection refused: connect in ExceptionUtil.rethrow(ExceptionUtil.java:138) Caused by: java.rmi.ConnectException: Connection refused to host: ::1; nested exception is: java.net.ConnectException: Connection refused: connect at java.rmi/sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:626) at java.rmi/sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:217) at java.rmi/sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:204) at java.rmi/sun.rmi.server.UnicastRef.newCall(UnicastRef.java:344) at java.rmi/sun.rmi.registry.RegistryImpl_Stub.lookup(RegistryImpl_Stub.java:116) in RemoteProcessSupport.lambda$acquire$2(RemoteProcessSupport.java:324) Caused by: java.net.ConnectException: Connection refused: connect at java.base/sun.nio.ch.Net.connect0(Native Method) at java.base/sun.nio.ch.Net.connect(Net.java:579) at java.base/sun.nio.ch.Net.connect(Net.java:568) at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:593) at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) at java.base/java.net.Socket.connect(Socket.java:633) at java.base/java.net.Socket.connect(Socket.java:583) at java.base/java.net.Socket. (Socket.java:507) at java.base/java.net.Socket. (Socket.java:287) in RemoteServer$1.createSocket(RemoteServer.java:156) ... 22 more Suppressed: com.intellij.database.util.AsyncTask$Companion$FrameData: Async frame data: Submit -> Prepare connection -> 

我用#注释掉了旗标。
-Djava.net.preferIPv4Stack=false
-Djava.net.preferIPv6Addresses=true

启动PostgreSQL服务器的方法是通过以下步骤:
postgres -D "C:\Program Files\PostgreSQL\16\data"

-1

当您想使用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

感谢其他人指导我解决了这个问题。


这并非必须的。只有在DNS配置错误或某些多主机情况下才需要这样做。 - user207421

-1

在Windows上,请确保您的Windows防火墙已正确配置/禁用。即使我在本地主机上进行测试,我也不想配置它,所以我不得不禁用Windows防火墙(因为我没有费心去配置它)才能让事情正常工作。


-1
当我在我的电脑上遇到了相同的错误(“连接被拒绝”),原因是我在服务器端定义了以下内容:
 Naming.rebind("rmi://localhost:8080/AddService"
   ,addService); 

因此,服务器绑定了IP = 127.0.0.1和端口8080。

但在客户端,我使用了:

AddServerInterface st = (AddServerInterface)Naming.lookup("rmi://localhost"
                        +"/AddService");

因此,我忘记在本地主机后添加端口号,所以我重写了上述命令,并添加了端口号8080,如下所示:

AddServerInterface st = (AddServerInterface)Naming.lookup("rmi://localhost:8080"
                        +"/AddService");

一切都运行正常。


这不正确。您用于注册表的URL并不确定远程对象绑定到哪个IP地址。IP绑定已经在此代码之前发生。 - user207421

-1

您可以简单地使用:

在服务器端:

Registry <objectName1> = LocateRegistry.createRegistry(1099);
Registry <objectName2> = LocateRegistry.getRegistry();

在客户端:

Registry <object name you want> = LocateRegistry.getRegistry();

1
欢迎来到StackOverflow。这并没有回答原始问题。 - mjuarez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接