oppo117 2014-04-01 09:34 采纳率: 0%
浏览 3005

java rmi连接远程主机问题

问题是这样的,通过rmi来实现分布式通信,用的是20112端口,在本地实现的时候是没问题的,但是部署到主机(亚马逊云机,供外访问ip:54.**.72.52,内部IP是10.0.3.9,有防火墙,但是已经打开20112和20110端口),就不能访问了,错误

java.rmi.ConnectionException:Connetcion refused to host:10.0.3.9;nested exception:              java.net.connetionException:connetion time out

(我奇怪:外部ip既然能连上,怎么会卡到10.0.3.9那里啊,不应该是一台机子吗?)
然后我在网上找答案:他们说20112端口是rmi通信端口,而数据发送还需要一个端口,需重写一个类,然后我就写了:

public class MyRMISocket extends RMISocketFactory {
public Socket createSocket(String host, int port) throws IOException {
    System.out.println("client socket"+host+":"+port);
    return new Socket(host, port);
}
@Override
public ServerSocket createServerSocket(int port) throws IOException {
    if (port == 0) {
        System.out.println("original port is 0");
        port = 20110; //不指定就随机分配了 
    }

// port=dataPort;
System.out.println("prot"+port);
return new ServerSocket(port);
}
}

按照网上的说法:指定20110来设置固定的端口来穿越防火墙,但是我设置之后,在本地测试的时候发现打印的log根本就没使用这个20110,还是rmi的我指定的那个端口20112,这是为什么,难道在一个网段里面不需要另起端口,还是我的理解有错误?
下面是我的服务端和客户端的连接代码
server:

  UpdateGatway gatway1=new UpdateGatwayImpl();
        RMISocketFactory.setSocketFactory (new MyRMISocket()); 
        System.setProperty("java.rmi.server.hostname", "54.**.72.52");
        Registry registry1=LocateRegistry.createRegistry(20112);
        registry1.rebind("vernumberGW", gatway1);

(用Naming绑定的时候出错,就用registry来绑定了)
client:

 UpdateGatway gatway1 = (UpdateGatway) Naming.lookup("//54.**.72.52:20112/vernumberGW");

如果放到局域网通信没问题,那个服务器是windows系统,我试了
system.setproperty("java.rmi.server.hostname","54.**.72.52")
重写RmiSocketFactory的方法
到现在都不行,只要放到服务器就报错,我在网上看到说要设置 host文件,我也试了,好像没效果,况且他们说的太笼统,我把服务器上的host文件也粘出来吧,大家看看是哪儿的问题,

#127.0.0.1 localhost

我把前面的注释去掉也不行,各位看看是哪儿的问题,如果是host文件的事,那么应该怎么改,谢~!

  • 写回答

1条回答 默认 最新

  • shiter 人工智能领域优质创作者 2015-01-19 14:25
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试