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 Fluent齿轮搅油
  • ¥15 八爪鱼爬数据为什么自己停了
  • ¥15 交替优化波束形成和ris反射角使保密速率最大化
  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素