tcp/udp服务端绑定公网ip失败的原因_仲夏夜之梦~的博客-爱代码爱编程
1、提出问题
TCP/UDP的服务端在开始通信之前都需要先绑定服务端的IP地址,最常见的方式就是赋值为INADDR_ANY。一般服务器会有多个网卡,即多个IP,这么做的目的是接收 发给服务端各个IP的请求。
struct sockaddr_in local;
local.sin_addr.s_addr = INADDR_ANY;
但是如果我们直接绑定公网IP呢?以绑定我自己的云服务器为例。
struct sockaddr_in local;
local.sin_addr.s_addr = inet_addr("124.222.215.205");
运行服务端的结果是绑定失败,这是为什么??
2、分析原因
实际上我们看到的云服务器IP不一定是真实的IP,可能是企业给你模拟出来的一个虚拟IP,请看下面这张图,左边是用户的主机,右边是企业的服务器集群。
我们在xshell上输入一个指令的时候,其实就是在向云服务器发送指令,这个指令会先到达企业的代理服务器,代理服务器根据内部的一个IP地址映射表,左边是虚拟IP,右边是真实IP,以此帮你定位到对应服务器。
因此,我们绑定公网IP的时候,绑定的可能只是一个虚拟IP,所以才会绑定失败。