java - 为什么java rmi一直连接到127.0.1.1。什么时候ip是192.168.X.X?

标签 java linux rmi

我有一个 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 文件以确保:

  • 本地主机映射到 127.0.0.1
  • 您的真实主机名映射到您的真实主机地址

众所周知,一些 Linux 发行版将此放在前面。

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

问题是由 stub 中嵌入的 IP 地址引起的,它最终来自像 InetAddress.getLocalAddress(), 这样的东西,它和上面一样是容易出错的。它被 java.rmi.server.hostname.

覆盖

这是 item A.1 in the FMI FAQ ,但请注意该项目的标题有误。它不会在 lookup() 期间发生,它会在您对生成的 stub 调用远程方法时发生。

关于java - 为什么java rmi一直连接到127.0.1.1。什么时候ip是192.168.X.X?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23478649/

相关文章:

java - RMI java 不创建骨架类

Java:将差异计数作为 int 返回的字符串比较库?

java - 如何在java中从控制台隐藏不必要的Selenium调试消息

java - HTTP 状态 404。描述请求的资源不可用

python - resetItems PyQt - 如何重新加载脚本

java - RMI:rmi服务器是否同时只能与一个网络接口(interface)一起工作

java - 线程中出现异常 "main"java.rmi.NotBoundException

java - Twitter4j TwitterStream 无法获取所有推文

linux - 过滤 netstat 输出以获取 bash 中的特定端口

linux - CentOS 7 中的链接目录