求救!rmi的特殊问题,高分相赠!
我写的一个简单的rmi在本地测试成功!
大致如下:
try{
//创建远程对象
RmiHelloRemoteObj ttt=new RmiHelloRemoteObj();
//启动注册表
LocateRegistry.createRegistry(2222);
//奖名称绑定到对象
Naming.rebind("//192.168.137.58:2222/helloObj",ttt);
System.out.println("RMI服务器正在运行。。。。。。");
}
catch(Exception e)
{
e.printStackTrace();
}
而放到远程服务器时,远程服务器处在DMZ中
1、用内部ip 即:Naming.rebind("//10.10.10.3:2222/helloObj",ttt);
运行java RmiHelloServer&正常的,但在广域网中的客户端调用时
hotel_rmi.RmiHelloRemoteIntfc c1=(hotel_rmi.RmiHelloRemoteIntfc)Naming.lookup("rmi://218.22.29.243:2222/helloObj");
result=c1.query(show_sql);
报错如下:
java.rmi.ConnectException: Connection refused to host: 10.10.10.3; nested exception is:
java.net.ConnectException: Connection timed out: connect
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:567)
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:185)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:171)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:101)
at hotel_rmi.RmiHelloRemoteObj_Stub.query(Unknown Source)
at hotel.BasicMessageBean.showHotel(BasicMessageBean.java:19)
.......
注意此时出错的提示并不是Connection refused to host: 218.22.29.243
(个人认为此时已经Naming.lookup到远程对象。如果我不启动远程rmi才报连不上218.22.29.243)
2、如果我把Naming.rebind("//10.10.10.3:2222/helloObj",ttt);改为Naming.rebind("//218.22.29.243:2222/helloObj",ttt);那么rmi启动不了
报错如下:
java.rmi.ConnectException: Connection refused to host: 218.22.29.243; nested exception is:
java.net.ConnectException: Connection timed out
请问高手们,有没有碰到过此类问题?什么原因,应该怎么解决,下弟在此不胜感激!