【发布时间】:2014-05-05 17:54:11
【问题描述】:
我有一个简单的 java rmi 应用程序:
客户:
Registry registry = LocateRegistry.getRegistry("localhost");
costApi = (CostApi) registry.lookup("server.CostApi");
当我在本地主机上托管服务器时,一切正常。当我在具有本地网络的另一台机器上启动相同的程序时,在 192.168.x.x 并更改为:
客户:
Registry registry = LocateRegistry.getRegistry("192.168.x.x");
costApi = (CostApi) registry.lookup("server.CostApi");
它不再工作了,并且出现了一个非常奇怪的错误:
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:129)
at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:194)
at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:148)
at com.sun.proxy.$Proxy0.dataCost(Unknown Source)
at billing.data.DataBiller.performBilling(DataBiller.java:57)
at billing.data.DataBiller.consumeMessage(DataBiller.java:46)
at general.templates.RabbitWorker.run(RabbitWorker.java:124)
at java.lang.Thread.run(Thread.java:744)
Caused by: java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
我什至没有尝试连接到 127.0.1.1,而是连接到 192.168.x.x,我该如何解决这个问题?我更喜欢只使用 java 代码,而不是使用配置文件修改我的机器。我用的是linux
【问题讨论】:
-
您的
/etc/hosts文件有误。 -
您是否尝试使用特定主机名更新您的
hosts文件,然后将该主机名添加到getRegistry而不是IP 地址? -
是的,我试过了,但没有用。现在 127.0.1.1 是我的计算机用户名,我也将其更改为 192.168.x.x
-
RMI 的工作方式首先连接到注册表并询问您感兴趣的对象的地址,然后连接到注册表给您的地址以便与目标对象对话.您已成功连接到 192.168.x.x 上的 registry,但注册表已将 127.0.1.1 作为目标对象的地址。