如题,若在bind中传入的sockaddr中的s_addr是当前服务器的公网IP
类似于这样sin.sin_addr.s_addr = inet_addr(“12.13.14.15”);会bind失败
具体原因是:云服务器厂商的解决方案是通过NAT对内网IP和公网IP形成一对一映射,而不是直接分配公网IP给服务器本身,(弹性IP才能实现),故直接在socket编程中绑定公网IP会绑定不上。
解决方案:将公网IP改为服务器运营商内网IP
(其实根据机房不同也会不一样,我阿里云的不需要,但是AWS服务器需要用内网IP)
sin.sin_addr.s_addr = inet_addr(“172.30.40.50”);
即可绑定成功,但这样仅仅只是服务端绑定套接字时用
客户端connect时仍需使用公网IP
记之备忘