我正在尝试编写一个更简单的客户端服务器程序,使用我的笔记本电脑作为服务器,使用几台 Android 设备作为客户端。服务器监听一个端口(例如 5902),直到客户端尝试连接。服务器上会生成线程,然后进行通信。
在基本上没有防火墙的友好实验室环境中,这可以正常工作。
在家里,我使用 AT&T U-Verse 及其 Motorola NVG510 路由器和默认防火墙。我的粗略理解是,我需要为每台设备打开防火墙上的该端口,因为现在 NVG510 会根据每台设备打开端口。
但是,尝试在多个设备上打开同一个端口时会出现针孔冲突错误(我认为这听起来就是这样——打开端口是一个针孔,为两个设备打开同一个端口就是冲突。)
有什么方法可以在家用路由器上完成我想做的事情吗?在家完成这个项目会很不错。
(注意:这严格来说与网络问题有关。核心客户端/服务器软件可在其他环境中运行。)
更新:在良性实验室环境中,每个设备都有自己的 IP 地址。在我的家庭网络中,我只能使用端口转发地址 192.168.1.x,我怀疑这是主要区别。
答案1
您将通过端口传入的流量转发到防火墙后面的设备。如果所有设备都使用相同的服务,则无需“为每个设备”打开一个端口。
想象一下,它是一种面向公众的服务,您是否希望为互联网上可能想要访问它的每个人开放一个端口?:)
无论如何,对于您的 NVG510:NAT/游戏您创建一个“自定义服务”(名称、要监听的端口、要转发的协议),然后添加一个“托管应用程序”,为其选择您刚刚创建的新自定义服务,并输入您想要将该流量转发到的服务器的 IP。
答案2
大多数客户端(如 SSH)都可以选择放置不同的端口,例如,您的服务器是 5902,您可以将客户端放在路由器上的 5903 端口上,将 5903 端口转发到 5902 意味着您可以将多个设备转发到同一个端口