网络连接环境,两台机子+一路由器:
机子A:位于有线通网络,作为RMI客户端
机子B:位于电信网络,作为RMI服务器,连到无线路由器R上,机子B动态分配的IP为192.168.1.100。.
无线路由器R:此路由器接外网,外网IP为58.33.142.177,机子B就是连接它上网的。已在此路由器配置虚拟服务器,将端口1099映射到了192.168.1.100。
当机子A也连到路由器R上面时,A、B之间RMI正常;
当机子A连有线通网络时,能取得服务对象,但却不能调用此对象的接口。
服务器主要代码如下:
System.setProperty("java.security.policy", Server.class.getResource("server.policy").toString ()); System.setProperty("java.rmi.server.hostname","58.33.142.177"); System.setSecurityManager(new RMISecurityManager()); LocateRegistry.createRegistry(1099); TaskDispatcherImpl taskDispatcherImpl = new TaskDispatcherImpl(); Naming.rebind("rmi://192.168.1.100:1099/TaskDispatcher", taskDispatcherImpl);
客户端代码如下:
public class Client { public static void main (String []args) throws Exception { try { System.setProperty("java.security.policy", Client.class.getResource("server.policy").toString()); System.setSecurityManager(new RMISecurityManager()); Registry reg =LocateRegistry.getRegistry("58.33.142.177", 1099); TaskDispatcher taskDispatcher=(TaskDispatcher)reg.lookup("TaskDispatcher"); // 这一步能执行过去,取得的实际对象类型是TaskDispatcher_Stub TaskInfo taskInfo = taskDispatcher.getTaskInfo(); // 这一步会抛出异常
}
catch(RemoteException re) { re.printStackTrace (); }
}
异常信息如下:
java.rmi.ConnectException: Connection refused to host: 58.33.142.177; nested exception is:
java.net.ConnectException: Connection timed out: connect
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:601)
...
请帮我看看这是什么原因造成的,该怎么改,谢谢!