自己开发的一套RMI的应用,在Windows平台测试没有问题,但部署到Linux下Client总是不能连接Server.
Server邦定的是0.0.0.0:9000,客户端能够连接,看了下返回结果,发现Proxy中一个Host字段返回值有问题,经常会是 127.0.0.1,这个是由于Server注册时,没有指定邦定IP,结果会返回Hosts中的localhost的IP。通过修改这个IP,就能够使客户端正常访问。
下面是自己写的一段程序,能够修改Host的IP地址。
我使用的是JDK1.6,这种方式可以保证,在服务端不指定邦定IP情况下,正常访问。
Server邦定的是0.0.0.0:9000,客户端能够连接,看了下返回结果,发现Proxy中一个Host字段返回值有问题,经常会是 127.0.0.1,这个是由于Server注册时,没有指定邦定IP,结果会返回Hosts中的localhost的IP。通过修改这个IP,就能够使客户端正常访问。
下面是自己写的一段程序,能够修改Host的IP地址。
private static void ChangeHost(Object obj, String host) {
try {
Proxy proxy = (Proxy) obj;
RemoteObjectInvocationHandler handler = (RemoteObjectInvocationHandler) proxy.getInvocationHandler(proxy);
Object o = handler.getRef();
Class c = o.getClass();
Field f = c.getDeclaredField("ref");
f.setAccessible(true);
o = f.get(o);
c = o.getClass();
f = c.getDeclaredField("ep");
f.setAccessible(true);
o = f.get(o);
c = o.getClass();
f = c.getDeclaredField("host");
f.setAccessible(true);
f.set(o, host);
} catch (Exception e) {
logger.fatal("Can't set Host of Remote Object.");
}
}
我使用的是JDK1.6,这种方式可以保证,在服务端不指定邦定IP情况下,正常访问。