【问题标题】:How do I configure a custom client socket factory for RMI in Java 7?如何在 Java 7 中为 RMI 配置自定义客户端套接字工厂?
【发布时间】:2012-09-27 03:04:41
【问题描述】:

我为 RMI 编写了一个自定义客户端套接字工厂,因此如果由于防火墙而导致直接套接字连接不可用,我将回退到 HTTP。这适用于 Java 6。在 Java 7 中,当我调用 RMISocketFactory.setSocketFactory(mySocketFactory) 时,我收到以下错误消息:

java.net.SocketException: 工厂已经定义

调用 RMISocketFactory.getSocketFactory() 表明安装的工厂是 com.sun.deploy.net.protocol.rmi.DeployRMISocketFactory 的一个实例。我不能使用默认的 HTTP 回退机制,因为我已经为 http 连接自定义了 URL(我不能使用 /cgi/java-rmi 路径)。

当 setSocketFactory() 被定义为每个进程只能调用一次时,为什么 Java 7 会预先安装套接字工厂?我怎样才能让它使用我自己的套接字工厂?

【问题讨论】:

    标签: java sockets rmi


    【解决方案1】:

    您应该通过上世纪 1.2 中引入的 RMIClientSocketFactory 机制使用每个对象的套接字工厂。

    【讨论】:

    • 您指的是采用 RMIClientSocketFactory 参数的 UnicastRemotObject.exportObject 构造函数吗?我不太清楚如何使用它,因为我的客户知道服务器的外部主机名/地址;服务器不知道自己的外部 IP 地址或主机名。如何使我的 RMIClientSocketFactory 使用客户端提供的参数来建立到服务器的套接字?
    • @JesseBarnum 如果存根未使用正确的 IP 地址构建,则服务器应使用 java.rmi.server.hostname 属性。或者您的套接字工厂可以读取客户端设置的某些系统属性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    • 1970-01-01
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多