我们正在使用客户端/服务器RMI通信在同一台计算机上进行(因此所有IP都应该是localhost)。
我们启动注册表(使用默认端口1099)
registry = LocateRegistry.createRegistry(port);
并将一些对象导出到RMI注册表
Naming.rebind(“//”+“localhost”+“:”+ port +“/”+ name,object);
从另一个进程中检索一些对象(请记住,所有内容都在localhost上运行)
MyRemoteObject ro =(MyRemoteObject)Naming.lookup(“//”+“localhost”+“:”+ port +“/”+ name);
当您以本地区域网络工作开始运行应用程序,并且在过程中禁用网络连接时,问题会发生。如果您运行应用程序并且LAN正常工作,则不会弹出任何问题,如果您运行应用程序并且LAN不工作,则不会弹出任何问题。只有在运行应用程序时更改LAN时才会发生这种情况。
执行Naming.lookup()方法时抛出的异常是:
java.lang.RuntimeException:java.rmi.ConnectIOException:创建到:192.168.x.x的连接时出现异常;嵌套异常是: java.net.NoRouteToHostException:无法路由到主机:连接
调试了一下,我发现RemoteObject($ Proxy0) - > RemoteObjectInvocationHandler - > UnicastRef2 - > LiveRef - > TCPEndpoint的主机IP(例如:192.168.x.x)而不是“ localhost”或127.0.0.1(这是我想要的内容)。 liveRef对象的isLocal布尔值始终为false。
我不知道是否够清楚。对不起!!!
你有什么建议吗?
我的尝试:
我尝试了以下解决方案
使用-Djava.rmi.server.hostname = localhost参数运行jvm
重新定义RMIServerSocketFactory以每次返回127.0.0.1。(TCPEndpoint具有192.168.x.x IP,isLocal始终为false)
在URI中不带主机调用rebind和lookup。这意味着localhost。
但是这些都没有起作用。
欢迎任何建议。
我们启动注册表(使用默认端口1099)
registry = LocateRegistry.createRegistry(port);
并将一些对象导出到RMI注册表
Naming.rebind(“//”+“localhost”+“:”+ port +“/”+ name,object);
从另一个进程中检索一些对象(请记住,所有内容都在localhost上运行)
MyRemoteObject ro =(MyRemoteObject)Naming.lookup(“//”+“localhost”+“:”+ port +“/”+ name);
当您以本地区域网络工作开始运行应用程序,并且在过程中禁用网络连接时,问题会发生。如果您运行应用程序并且LAN正常工作,则不会弹出任何问题,如果您运行应用程序并且LAN不工作,则不会弹出任何问题。只有在运行应用程序时更改LAN时才会发生这种情况。
执行Naming.lookup()方法时抛出的异常是:
java.lang.RuntimeException:java.rmi.ConnectIOException:创建到:192.168.x.x的连接时出现异常;嵌套异常是: java.net.NoRouteToHostException:无法路由到主机:连接
调试了一下,我发现RemoteObject($ Proxy0) - > RemoteObjectInvocationHandler - > UnicastRef2 - > LiveRef - > TCPEndpoint的主机IP(例如:192.168.x.x)而不是“ localhost”或127.0.0.1(这是我想要的内容)。 liveRef对象的isLocal布尔值始终为false。
我不知道是否够清楚。对不起!!!
你有什么建议吗?
我的尝试:
我尝试了以下解决方案
使用-Djava.rmi.server.hostname = localhost参数运行jvm
重新定义RMIServerSocketFactory以每次返回127.0.0.1。(TCPEndpoint具有192.168.x.x IP,isLocal始终为false)
在URI中不带主机调用rebind和lookup。这意味着localhost。
但是这些都没有起作用。
欢迎任何建议。
127.0.0.1
会自动转换为::1
吗? - gorootde