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
    关注
    评论

报告相同问题?

悬赏问题

  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?