与路由器后面的计算机进行简单的TCP通信

Clé*_*ent 7 sockets tcp nat

我正在为我的媒体播放器编写C#遥控器.它在我的Android手机上运行.

我有一个客户端应用程序在我的计算机上侦听TCP连接,其中一个已建立连接,处理命令(音量增大,音量减小,......).我已经telnet 127.0.0.1在我的计算机上测试了那部分,它的效果非常好.

从手机连接起来比较困难,因为它不在同一个网络上(我没有Wi-Fi,只有有线连接),所以我不知道如何继续.基本上我想连接到路由器后面的计算机.

我是否应该在手机上托管TCP服务器,并让PC连接到它?以IRC为例:虽然我在路由器后面,但我可以连接到外部服务器,无需端口转发.或者,如果在我的计算机上托管服务器很好,我该如何连接它?

我还不明白这一切,如果我出错了,请随时纠正我.

Kon*_*rak 6

保持PC托管服务器并配置路由器以转发到PC的连接更合乎逻辑.您有两种选择:

  • 建立DMZ:路由器上的所有传入连接仅转发到一台PC.当您在网络上只有1台PC需要接受连接时,这是最简单的.
  • 配置端口转发:您可以指示路由器将端口X上传入的连接转发到端口Z上的IP Y.这样,多个PC可以列出连接(使用路由器上的不同端口).它也更安全一点.

如何设置这些取决于您的路由器,但大多数路由器只接受其端口80上的连接并提供简单的Web界面.如果您提供路由器品牌,我们可以将您链接到手册.

  • 但IRC连接如何工作?为什么我不需要IRC的端口转发?(甚至HTTP?) (2认同)
  • 您不需要IRC的端口转发,因为它是连接到IRC的PC.您的路由器将看到您的PC尝试连接,并使用NAT(网络地址转换)将返回的数据包从服务器传输到您的PC. (2认同)
  • 确切地说,但由于双方都知道其他人的IP地址,他们都会在端口A上侦听连接,并尝试连接到端口A上的另一方.第一个连接"获胜".所以,是的,手机将无法访问PC,但PC将到达手机.所有网页都提供了彼此的IP地址.无论如何,这只是一个想法;] (2认同)

Jér*_*nge 6

从手机连接起来比较困难,因为它不在同一个网络上(我没有Wi-Fi,只有有线连接),所以我不知道如何继续.基本上我想连接到路由器后面的计算机.

您想要实现的目标是可能的,但您需要了解NAT遍历和打孔.

通常,NAT /路由器后面的设备具有仅在LAN上有效的专用IP地址.远程设备无法猜测它.当设备想要与WAN通信时,NAT将该私有地址转换为公共IP地址.

简单的解决方案是您可以为NAT后面的设备提供公共IP地址.在这种情况下,WAN上的远程设备很容易就能到达它,因为它的地址是公共的.

  • 那么如何为NAT后面的设备提供公共IP地址? (2认同)