设置我的服务器以允许远程用户连接到我的Java程序

时间:2012-01-01 00:24:24

标签: java dns ip rmi

我的程序是使用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

3 个答案:

答案 0 :(得分:1)

  1. 检查服务器上的软件防火墙。 (如果你还没有...)

  2. 检查您尝试从连接的计算机上的端口及其防火墙,路由器等

  3. 如果您绝对确定您已做好一切,请与您的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调制解调器设置为桥接模式并且只允许路由器处理端口转发,它似乎解决了问题。