我的程序是使用RMI允许用户连接到中央服务器的游戏。该游戏在我的家庭网络中的计算机上运行良好。我希望网络之外的远程用户能够连接到服务器。
根据类似线程的建议,我设置了一个no-ip.com帐户,将域名映射到我的游戏服务器,以便我的计算机可以公开访问。
我更改了我的代码以获取类别存根来自:
Registry registry = LocateRegistry.getRegistry("10.10.10.105");
/* 10.10.10.105 is my local address and this works fine on my home network */
要:
Registry registry = LocateRegistry.getRegistry("mychosenhostname.no-ip.org");
/* mychosenhostname.no-ip.org is the redirecting domain that I received from no-ip */
然而,这个新代码出现java.rmi.ConnectException: Connection refused to host:
错误。我在canyouseeme.org上使用了端口检查器工具,发现我的端口1099已打开。我不确定我还需要做些什么来使我的程序可以访问。
BTW:我正在使用带有Glassfish的NetBeans IDE
答案 0 :(得分:1)
检查服务器上的软件防火墙。 (如果你还没有...)
检查您尝试从连接的计算机上的端口及其防火墙,路由器等
如果您绝对确定您已做好一切,请与您的ISP联系,询问他们是否阻止该端口。
< / LI> 醇>答案 1 :(得分:0)
虽然打开端口1099是一个好的开始,但这只是允许您联系RMI 注册表。实际的RMI导出对象将在不同的端口上可用(默认情况下为任意端口)。
您有两种选择:
1)在路由器中将服务器设置为DMZ(意味着所有传入连接都将路由到该服务器)。但请注意服务器上的安全性。
2)为对象设置特定端口 - http://docs.oracle.com/javase/1.4.2/docs/guide/rmi/faq.html#firewallIn。
PS - 诸如Wireshark之类的数据包捕获工具通常可以帮助诊断这些问题。
答案 2 :(得分:0)
我想我可能找到了问题的答案。我的设置看起来像ADSL Modem - &gt;路由器 - &gt;机等。
即使我将端口从我的DSL调制解调器转发到路由器然后转发到机器,DSL调制解调器完全忽略了它的端口转发设置。一旦我将DSL调制解调器设置为桥接模式并且只允许路由器处理端口转发,它似乎解决了问题。