繁体   English   中英

当客户端计算机具有多个IP地址时,RMI服务器到客户端调用失败

[英]RMI Server to Client call fails when Client machine has more than one IP Address

首先,我想为这个问题发布一些真实的代码,但我不能,因为它太多了。 那就是说,这是我的情况:

服务器端

我有一个RMI服务器等待客户端连接和“注册”自己,以便服务器可以在客户端上进行函数调用。 基本上,服务器有一个已发布的函数,其作用类似于以下伪代码:

public class Server extends UnicastRemoteObject implements ServerInterface{
    public Server(){ /* Server publishes itself here */ }

    ...

    /** One of many methods visible to a remote Client */
    public void registerClient(Client c) throws RemoteException{
        //1. Make some remote calls on 'c' for book-keeping purposes
        //2. Store reference to c to make calls on it later
    }
}

客户端

在启动时,客户端调用Naming.lookup([url])来获取服务器的存根,我将其称为serverRef ,然后调用serverRef.registerClient(this) 问题发生在服务器的registerClient(Client c)方法的第一行。

问题

当服务器在registerClient方法内对Client进行第一次远程方法调用时,抛出RemoteException。 当客户端和服务器计算机位于同一子网上时,客户端的计算机具有辅助IP地址。 所以IP看起来像这样:

服务器机器IP:
, 客户机IP地址

在服务器的第一次远程回调期间抛出的RemoteException指示服务器正在尝试连接到客户端的192.168.67.2地址,这是导致失败的原因。 服务器应该尝试连接到123.45.67.1地址。 我知道禁用属于第二个IP地址的网络接口可以解决问题,但这对我来说不是一个真正的选择。

在打开与新客户端对象存根的连接时,有没有办法“告诉”服务器端RMI连接哪个IP地址?

有几种可能的解决方案,包括

  • 编写自定义客户端套接字工厂

  • 在java.rmi.server.hostname属性中指定地址

    -Djava.rmi.server.hostname=ip_address

  • 等等

看看这个链接:

这些链接也很有用:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM