java rmi连接远程主机问题 70
问题是这样的,通过rmi来实现分布式通信,用的是20112端口,在本地实现的时候是没问题的,但是部署到主机(亚马逊云机,供外访问ip:54.**.72.52,内部IP是1...
问题是这样的,通过rmi来实现分布式通信,用的是20112端口,在本地实现的时候是没问题的,但是部署到主机(亚马逊云机,供外访问ip:54.**.72.52,内部IP是10.0.3.9,有防火墙,但是已经打开20112和20110端口),就不能访问了,错误截图
(我奇怪:外部ip既然能连上,怎么会卡到10.0.3.9那里啊)
然后我在网上找答案:他们说20112端口是rmi通信端口,而数据发送还需要一个端口,需重写一个类,然后我就写了:
按照网上的说法:指定20110来设置固定的端口来穿越防火墙,但是我设置之后,在本地测试的时候发现打印的log根本就没使用这个20110,还是rmi的我指定的那个端口20112,这是为什么,难道在一个网段里面不需要另起端口,还是我的理解有错误?
下面是我的服务端和客户端的连接代码
server:
(用Naming绑定的时候出错,就用registry来绑定了)
client:
如果放到局域网通信没问题,那个服务器是windows系统,我试了
system.setproperty("java.rmi.server.hostname","54.**.72.52")
重写RmiSocketFactory的方法
到现在都不行,只要放到服务器就报错,我在网上看到说要设置 host文件,我也试了,好像没效果,况且他们说的太笼统,我把服务器上的host文件也粘出来吧,大家看看是哪儿的问题,
# 127.0.0.1 localhost
我把前面的注释去掉也不行,各位看看是哪儿的问题,如果是host文件的事,那么应该怎么改,谢~!
最后自己解决了,原因是:如果自定义数据端口穿越防火墙的时候,需要设置RmiSocetFactory.setSocketFactory(new MyRMISocket()),这个设置必须在UpdateGateway gatway1=new UpdateGatwayImpl()这句代码前面才行,因为在实现接口的时候就要用到serversocket,所以最后是顺序的问题。 展开
(我奇怪:外部ip既然能连上,怎么会卡到10.0.3.9那里啊)
然后我在网上找答案:他们说20112端口是rmi通信端口,而数据发送还需要一个端口,需重写一个类,然后我就写了:
按照网上的说法:指定20110来设置固定的端口来穿越防火墙,但是我设置之后,在本地测试的时候发现打印的log根本就没使用这个20110,还是rmi的我指定的那个端口20112,这是为什么,难道在一个网段里面不需要另起端口,还是我的理解有错误?
下面是我的服务端和客户端的连接代码
server:
(用Naming绑定的时候出错,就用registry来绑定了)
client:
如果放到局域网通信没问题,那个服务器是windows系统,我试了
system.setproperty("java.rmi.server.hostname","54.**.72.52")
重写RmiSocketFactory的方法
到现在都不行,只要放到服务器就报错,我在网上看到说要设置 host文件,我也试了,好像没效果,况且他们说的太笼统,我把服务器上的host文件也粘出来吧,大家看看是哪儿的问题,
# 127.0.0.1 localhost
我把前面的注释去掉也不行,各位看看是哪儿的问题,如果是host文件的事,那么应该怎么改,谢~!
最后自己解决了,原因是:如果自定义数据端口穿越防火墙的时候,需要设置RmiSocetFactory.setSocketFactory(new MyRMISocket()),这个设置必须在UpdateGateway gatway1=new UpdateGatwayImpl()这句代码前面才行,因为在实现接口的时候就要用到serversocket,所以最后是顺序的问题。 展开
3个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |