网络编程服务器端绑定ip设置

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/AXuan_K/article/details/52514109

在使用socket编写服务器程序时,设置服务器绑定的sockaddr_in结构往往会困扰很多同学,sockaddr_in结构中sin_famliy和sin_port(注意要使用htons转换为网络序)就不说了,相信大家已知道。sin_addr是要设置的监听地址。sin_addr类型为: 

struct in_addr {

               in_addr_t s_addr;

           };

这里有几个常用的值:

(1)sin_addr.s_addr = INADDR_ANY;(0x00000000)

(2)sin_addr.s_addr = INADDR_NONE;( 0xffffffff)inet_addr("255.255.255.255")

(3)sin_addr.s_addr = INADDR_LOOPBACK;(0x7f000001)inet_addr("127.0.0.1")

(4)sin_addr.s_addr = inet_addr("192.168.1.211");(192.168.1.211是本地eth0的ip地址)

(5)sin_addr.s_addr = inet_addr("192.168.1.210");(192.168.1.211是本地eth1的ip地址)

第一个值将监听IP设置为0,表示客户端发往本地任意ip上该端口的数据包都可以被服务器接收到。

第二个值将监听IP设置为广播地址,实验发现可以设置成功,但不知道有啥用?请各位大神指教。

第三个值将监听IP设置为本地环回地址,表明该服务仅用于本地socket通信,并且通信数据包不经过网卡,即使不连接网线也可以向127.0.0.1的监听端口发送数据包。

第四、五个值表示将监听IP设置为本地网卡上的IP。

ps:localhost、127.0.0.1和192.168.1.211的区别:localhost是本地主机名,/etc/hosts文件可以设置IP和localhost的对应关系;127.0.0.1是本地环回地址,和本地环回地址通信不经过物理网卡,因次即使不连接网络,127.0.0.1的数据包也可以发送和接收;192.168.1.211是本地网卡IP地址,网卡需上电才可以进行通信。

猜你喜欢

转载自blog.csdn.net/AXuan_K/article/details/52514109