加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

为什么java rmi保持连接到127.0.1.1.当ip是192.168.X.X?

发布时间:2020-12-13 19:01:58 所属栏目:Linux 来源:网络整理
导读:我有一个java rmi应用程序,我只是这样做: 客户: Registry registry = LocateRegistry.getRegistry("localhost");costApi = (CostApi) registry.lookup("server.CostApi"); 当我在localhost上托管服务器时,一切正常.当我在另一台具有本地网络的计算机上启动

我有一个java rmi应用程序,我只是这样做:

客户:

Registry registry = LocateRegistry.getRegistry("localhost");
costApi = (CostApi) registry.lookup("server.CostApi");

当我在localhost上托管服务器时,一切正常.当我在另一台具有本地网络的计算机上启动相同的程序时,在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文件以确保:

> localhost映射到127.0.0.1
>您的真实主机名映射到您的真实主机地址

众所周知,一些Linux发行版会将其重新置于前面.

如果问题仍然存在,请尝试将服务器上的java.rmi.server.hostname设置为客户端在执行远程方法调用时应使用的IP地址.在导出任何远程对象(包括注册表)之前,需要先设置它.

问题是由存根中嵌入的IP地址引起的,最终来自InetAddress.getLocalAddress(),如上所述.它被java.rmi.server.hostname覆盖.

这是item A.1 in the FMI FAQ,但请注意该项目是错误的.在lookup()期间不会发生这种情况,当您在生成的存根上调用远程方法时会发生这种情况.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读