Java exportObject和createRegistry相同(端口+;ip)

Java exportObject和createRegistry相同(端口+;ip),java,rmi,Java,Rmi,它们可以共享同一个端口,并且可以正常工作。但每当我试图通过扩展RMISocketFactory为其中任何一个指定ip地址时,它都会报告“端口已在使用” 如果它们可以在本地主机上共享相同的端口,为什么特定的ip不起作用?它不起作用,因为它们只能在使用相同的RMIServerSocketFactory时共享相同的端口,这意味着该套接字工厂的equals()方法在与其他实例一起调用时返回true,或者,如果您只使用一个实例,则为其本身 因此: 不要扩展RMISocketFactory,它已经过时了。创

它们可以共享同一个端口,并且可以正常工作。但每当我试图通过扩展RMISocketFactory为其中任何一个指定ip地址时,它都会报告
“端口已在使用”


如果它们可以在本地主机上共享相同的端口,为什么特定的ip不起作用?

它不起作用,因为它们只能在使用相同的RMIServerSocketFactory时共享相同的端口,这意味着该套接字工厂的equals()方法在与其他实例一起调用时返回true,或者,如果您只使用一个实例,则为其本身

因此:

  • 不要扩展RMISocketFactory,它已经过时了。创建自己的实现RMIServerSocketFactory的类,并确保其equals()方法与自身匹配

  • 在exportObject()和createRegistry()中使用该服务器套接字工厂

  • 但我会问,为什么要绑定到一个特定的IP地址。通常这是一个错误,通常是另一个问题的错误解决方案,例如java.rmi.server.hostname问题。

    a)谢谢您的回复。我确实实现了“InetAddressBoundSocketFactory扩展RMISocketFactory实现了可序列化的{createServerSocket;createSocket;}”。到了第1点,我想你也建议我实现“equal()”。b)我的目的是在多NIC机箱上启动多个应用程序,每个实例一个IP。我已经将java.rmi.server.hostname设置为我尝试绑定到的IP地址,这是否意味着可以绑定特定的IP?(A)我的观点1似乎非常清楚,与您的猜测不一致。再试一次。NB RMIServerSocketFactory实现不需要可序列化。(B) 我不明白你的问题。
     RMI exportObject(Remote obj, PORT); 
     createRegistry(PORT);
    
    createRegistry(PORT,ssf,csf);