你这样试试: server端: Door door = (Door)c.newInstance(); door.setLocation("BeiDa"); door.setOpen(true); System.out.println("*************"); UnicastRemoteObject.exportObject(door); Registry reg = LocateRegistry.createRegistry(8000); reg.rebind("door1",door); client端: Registry r = LocateRegistry.getRegistry(host(61.X.X.X),8000); Door door = (Door)r.lookup("door1");
我估计是security的原因
是啊,我现在遇到的问题就是说,这台服务器上并没有61.X.X.X这个地址,RMI服务只能绑定到 10.X.X.X 上,然而现在遇到的问题是:当客户端
访问61.X.X.X 上的RMI服务时,经过地址映射到10.X.X.X(rmi://10.X.X.X/test/),报出的错误是:10.X.X.X 上的RMI服务没有启动!61.X.X.X上有什么,我自己都不知道,那是电信局给我做的IP映射。回复:woowindice(黑山老妖) 先生:
不是安全策略的问题,在局域网里,我的程序很正常!谢谢!!回复: walkcamel(虫子) 先生:
能再给我解释的详细一点吗??
server端:
Door door = (Door)c.newInstance();
door.setLocation("BeiDa");
door.setOpen(true);
System.out.println("*************");
UnicastRemoteObject.exportObject(door);
Registry reg = LocateRegistry.createRegistry(8000);
reg.rebind("door1",door);
client端: Registry r = LocateRegistry.getRegistry(host(61.X.X.X),8000); Door door = (Door)r.lookup("door1");
自己实现RMIClientSocketFactory 和RMIServerSocketFactory
如你所说,希望Client对61.X.X.X的8000端口的访问被
转到10.X.X.X的8000端口,而你并没61.X.X.X的控制权,
当然还需要电信局增加61.X.X.X:8000到10.X.X.X:8000
的映射才行。
你说的电性局给你做的映射我估计它是把地址映射到了INTERNET上的10.X.X.X上了!那台服务器上当然没有RMI服务啦!你要找到的是INTRANET上的10.X.X.X!
我无法监听61.X.X.X的8000端口,我只能在 10.X.X.X 的8000端口监听,
因为本机的网卡的地址是10.X.X.X,是城市宽带介入所设置的城域网IP,
现在通过任意客户端拨号上网,是PING不到 10.X.X.X的,为什么?因为这个
地址是城域网的地址。本机没有的IP地址怎么能启动服务呢?这个道理就和
新浪主机的WEB服务不能绑定网易的IP地址是一样的。
拨号客户只能通过61.X.X.X来访问 10.X.X.X ,这是由电信来做的地址映射
来完成的。现在我在10.X.X.X上绑定了RMI服务,希望拨号客户能从 61.X.X.X
调用到它的RMI方法,但是实际应用中,RMI客户端程序告诉我说“10.X.X.X上的RMI服务没有启动!”,
也就是说客户端能够通过IP映射访问到10.X.X.X这个地址,但是却找不到这个
地址上的服务。
我推测客户端在初次和服务器进行通讯以后,会收到服务器端发过来的IP
(10.X.X.X),然后它就直接在INTENET上去找这个地址,而不是去访问
61.X.X.X了,这就是问题所在。请帮我想想该怎么解决???