您的位置:首页 > 理论基础 > 计算机网络

网络编程中如何设置服务器监听IP

2014-09-14 00:01 441 查看
       在使用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地址,网卡需上电才可以进行通信。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  网络编程