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

前端之家收集整理的这篇文章主要介绍了为什么java rmi保持连接到127.0.1.1.当ip是192.168.X.X?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有一个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()期间不会发生这种情况,当您在生成的存根上调用远程方法时会发生这种情况.

猜你在找的Linux相关文章