java.rmi.ConnectException:拒绝连接到主机:127.0.0.1
我试过使用RMI,这里是服务器端。起初它毫无例外地工作,但现在每当我尝试运行下面的代码三次之后,就会出现一些错误 代码是:java.rmi.ConnectException:拒绝连接到主机:127.0.0.1,java,port,rmi,server,Java,Port,Rmi,Server,我试过使用RMI,这里是服务器端。起初它毫无例外地工作,但现在每当我尝试运行下面的代码三次之后,就会出现一些错误 代码是: import java.rmi.server.UnicastRemoteObject; /** * Created by elyas on 12/11/14 AD. */ public class LogicImplement extends UnicastRemoteObject implements Logic { public LogicImpleme
import java.rmi.server.UnicastRemoteObject;
/**
* Created by elyas on 12/11/14 AD.
*/
public class LogicImplement extends UnicastRemoteObject implements Logic
{
public LogicImplement() throws Exception
{
java.rmi.registry.LocateRegistry.createRegistry(6060);
java.rmi.Naming.rebind("Object1",this);
}
@Override
public int sum(int a, int b) throws Exception
{
int result = a + b;
System.out.println("ana sum executed");
return result;
}
public static void main(String[] args)
{
try
{
LogicImplement logicImplement = new LogicImplement();
} catch (Exception e)
{
e.printStackTrace();
}
}
}
错误是这样的:我试图将Object1更改为例如Object2,但再次出现错误,我还更改了端口号
什么是解决方案
java.rmi.ConnectException: Connection refused to host: 127.0.0.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.newCall(UnicastRef.java:341)
at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
at java.rmi.Naming.rebind(Naming.java:177)
at LogicImplement.<init>(LogicImplement.java:12)
at LogicImplement.main(LogicImplement.java:27)
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:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
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:392)
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:147)
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:613)
... 12 more
java.rmi.ConnectException:拒绝连接主机:127.0.0.1;嵌套异常是:
java.net.ConnectException:连接被拒绝
位于sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:619)
位于sun.rmi.transport.tcp.tcpcchannel.createConnection(tcpcchannel.java:216)
位于sun.rmi.transport.tcp.tcpcchannel.newConnection(tcpcchannel.java:202)
位于sun.rmi.server.UnicastRef.newCall(UnicastRef.java:341)
位于sun.rmi.registry.RegistryImpl_Stub.rebind(未知源)
位于java.rmi.Naming.rebind(Naming.java:177)
在LogicImplement。(LogicImplement.java:12)
位于LogicImplement.main(LogicImplement.java:27)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)中
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:606)
位于com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
原因:java.net.ConnectException:连接被拒绝
位于java.net.PlainSocketImpl.socketConnect(本机方法)
位于java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
位于java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
位于java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
位于java.net.socksocketimpl.connect(socksocketimpl.java:392)
位于java.net.Socket.connect(Socket.java:579)
位于java.net.Socket.connect(Socket.java:528)
位于java.net.Socket。(Socket.java:425)
位于java.net.Socket(Socket.java:208)
位于sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:40)
位于sun.rmi.transport.proxy.rmismastersocketfactory.createSocket(rmismastersocketfactory.java:147)
位于sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:613)
... 还有12个
这一例外可能有两个原因:
- 您尚未在后台启动注册表
- 您试图连接到错误的端口号
- 您的防火墙可能会阻止连接
如果在调用远程方法时仍然发生这种情况,请参阅。答案非常简单,默认情况下,注册表在端口1099上运行。要在其他端口上启动注册表,请在命令行上指定端口号。不要忘记取消设置CLASSPATH环境变量。有关更多信息,请查看此链接: **因此,为了修复此代码,我必须将端口号表6060更改为1099
注意:如果1099被其他服务使用,则必须测试1100,如果1100也被使用,则必须使用1101,以此类推。:-) 由于这是一个端口号问题,有另一种方法可以在您想要的端口号上启动注册表:
java.rmi.registry.Registry rmiRegistry = java.rmi.registry.LocateRegistry.
createRegistry(6060); // Creates a registry on 6060
rmiRegistry.rebind("Object1",this); // Binds to registry created on 6060
如果是因为防火墙,我该怎么办?错误的端口号是什么意思?如果引起问题,请在防火墙中添加异常。错误的端口号意味着您可能在端口(比如9098)上创建了一个注册表,在客户端(9099)上访问它。@DarshanLila 127.0.0.1上不会有防火墙问题。但您知道我不运行客户端,首先我运行服务器端,在执行请求时我得到了这个错误,我想说它不应该是错误的端口号。因为问题来自服务器端…我应该如何启动RMI注册表?我不明白你的意思:(
java.rmi.registry.Registry rmiRegistry = java.rmi.registry.LocateRegistry.
createRegistry(6060); // Creates a registry on 6060
rmiRegistry.rebind("Object1",this); // Binds to registry created on 6060