带有外部和内部IP地址的套接字
socket with external and internal ip address
我想知道像whatsapp这样的短信应用程序这个
有网络问题PC上的聊天程序:
服务器(1.2.3.5)路由器(为1.2.3.4)路由器B (1.2.3.6)
在路由器A下面有2台计算机期间)(192.168.0.2B (192.168.0.3)
在路由器B下有2台计算机C (192.168.0.4)D (192.168.0.5)
当D想要连接到A时,将消息发送给服务器,服务器将消息转发给A,路由器(1.2.3.4)需要设置端口转发规则例如,聊天程序使用端口999当服务器发送消息到1.2.3.4:999时,路由器(1.2.3.4)将消息转发给a(192.168.0.2:999),可以在PC上设置路由器设置
但是当我们使用手机并连接到wifi时电话的外部IP被更改并分配给内部IP,但显然我们不能在该路由器上设置端口转发规则那么,短信(或whatsapp)如何在网络上很好地工作呢?
服务器需要与位于不同子网上的机器通信。您有两个选择:
-
让客户端发起到服务器的连接。例如,这就是Skype的工作原理。客户端一旦连接上,服务器就可以向其发送数据。
-
让客户端使用uPnP转发路由器上的一个已知端口。但是,这需要服务器提前知道端口和主机。除了特定的应用程序(如BitTorrent),这通常是不可能的。
相关文章:
- 无法将套接字绑定到地址
- CreateProcess在退出后占用套接字端口(每个套接字地址只允许使用一次)
- 使用 boost::asio 获取 UDP 套接字远程地址
- 如何在FD_SET内获取套接字的IP地址
- 在UDP套接字上多次调用Connect()以发送到不同的目标地址 - 有效
- 从套接字获取地址系列.Linux
- 我可以通过AF_INET域套接字连接到IPv6地址吗?
- 两台具有相同 IP 地址的计算机 - 使用套接字的聊天应用程序
- 套接字连接到不存在的ip地址上的端口
- 使用本地 ipv6 套接字将 UDP 发送到本地 ipv4 地址
- C++ 套接字:结构地址的大小
- 在接受连接C++之前获取套接字的 IP 地址
- 从C++(Linux 套接字)中的缓冲区中提取 IP 地址
- 比较套接字地址的问题
- 使用unix套接字获取本地ip地址
- 如何使用recvfrom获取AF_INET6套接字的地址
- 服务器套接字-只接受来自白名单中IP地址的连接
- 如何在WinSock2中的DGRAM套接字上获取传入数据包的IP地址
- 是否可以获得多播组中每个套接字的所有sockaddr_in地址的列表
- 提升 unix 上的 UDP 套接字问题 - 绑定:地址已在使用中