Java 如何决定应该使用哪个物理接口RMI传输层?
当我使用来自客户端的远程引用时,一切都正常。如果我尝试从simu使用此远程引用,则通信失败,因为服务器尝试使用来自eth0的IP。让我烦恼的是,异常会在模拟器上报告。 我想我错过了什么 [编辑] simu提供了以下例外情况: java.rmi.connectionException:创建到Java 如何决定应该使用哪个物理接口RMI传输层?,java,rmi,Java,Rmi,当我使用来自客户端的远程引用时,一切都正常。如果我尝试从simu使用此远程引用,则通信失败,因为服务器尝试使用来自eth0的IP。让我烦恼的是,异常会在模拟器上报告。 我想我错过了什么 [编辑] simu提供了以下例外情况: java.rmi.connectionException:创建到eth0_IP的连接时发生异常 嵌套异常为:java.net.SocketException:无法访问网络 您需要设置以告知RMI注册表在其RMI URL中返回的主机名或IP地址 这默认为系统上第一个接口的IP
eth0_IP的连接时发生异常
嵌套异常为:java.net.SocketException:无法访问网络
您需要设置以告知RMI注册表在其RMI URL中返回的主机名或IP地址
这默认为系统上第一个接口的IP地址,这解释了为什么它只能通过eth0
工作
因此,您需要类似以下内容:
String ipAddress = "10.1.2.3"; //IP address of eth1
System.setProperty("java.rmi.server.hostname",ipAddress);
或
必须在服务器上设置此属性,但我认为客户端会出现问题…@chepseskaf-服务器上的设置会影响发送到客户端的数据。客户端通过eth1
连接到RMI注册表,询问RMI服务在哪里,并被告知类似rmi://eth0/yourservice
。您可以使用java.rmi.server.hostname
属性设置rmi注册表返回的主机名/IP地址。谢谢,它可以正常工作!很抱歉这么慢,我没有以同样的方式看待问题。该设置没有“告诉RMI注册表在其RMI URL中返回哪个主机名或IP地址”。它会影响远程存根本身的内容,当它在导出它所引用的远程对象时第一次构造它时。
String hostname = "myserver"; //hostname that resolves for client and simu
System.setProperty("java.rmi.server.hostname",hostname);