INADDR_ANY和INADDR_BROADCAST的含义上说明

INADDR_ANY 、INADDR_LOOPBACK 、INADDR_BROADCAST这三个常量在文件中的定义如下:

#define INADDR_ANY              (u_long)0x00000000
#define INADDR_LOOPBACK         0x7f000001
#define INADDR_BROADCAST        (u_long)0xffffffff
INADDR_ANY选项

一般情况下,如果你要建立网络服务器应用程序,则你要通知服务器操作系统:请在某地址 xxx.xxx.xxx.xxx上的某端口 yyyy上进行侦听,并且把侦听到的数据包发送给我。这个过程,你是通过bind()系统调用完成的。在服务端中,常常将需要绑定IP地址设置为INADDR_ANY。

INADDR_ANY代表指定地址为0.0.0.0的地址,这个地址事实上表示不确定地址,或“所有地址”、“任意地址”;表示本地上所有的IP地址。

因为有些机子不止一块网卡,多网卡的情况下,这个就表示所有网卡ip地址的意思。

比如一台电脑有3块网卡,分别连接三个网络,那么这台电脑就有3个ip地址了,如果某个应用程序需要监听某个端口,那他要监听哪个网卡地址的端口呢?如果绑定某个具体的ip地址,你只能监听你所设置的ip地址所在的网卡的端口,其它两块网卡无法监听端口,如果我需要三个网卡都监听,那就需要绑定3个ip,也就等于需要管理3个套接字进行数据交换,这样岂不是很繁琐?
所以你只需绑定INADDR_ANY,管理一个套接字就行,不管数据是从哪个网卡过来的,只要是绑定的端口号过来的数据,都可以接收到。

 // Bind the socket to any address and the specified port.
 //服务端
 sockaddr_in RecvAddr;
 RecvAddr.sin_family = AF_INET;
 RecvAddr.sin_port = htons(6000);
 RecvAddr.sin_addr.s_addr = htonl(INADDR_ANY);

 iResult = bind(RecvSocket,(sockaddr*)&RecvAddr,sizeof(RecvAddr));
 if (iResult != 0) 
 {
     printf("bind failed with error %d\n", WSAGetLastError());
     return 1;
 }
INADDR_LOOPBACK选项

INADDR_LOOPBACK, 总是代表经由回环设备的本地主机,往往是127.0.0.1, 表示只能收到127.0.0.1上面的连接请求,表示客户端和服务端在同一个机器上。

INADDR_BROADCAST选项

INADDR_BROADCAST 代表255.255.255.255的广播地址,广播消息不会在当前路由器进行转发,作用范围只能在当前局域网。

当在客户端网络编程中,如绑定的地址是INADDR_BROADCAST表示是广播通信。

//填充服务器socket信息
SOCKADDR_IN addrServer;
addrServer.sin_family   = AF_INET;
//服务器的应用程序端口
addrServer.sin_port     = htons(6000);
//要连接的服务器的IP地址,INADDR_BROADCAST代表255.255.255.255,是广播
addrServer.sin_addr.S_un.S_addr = htonl(INADDR_BROADCAST) ;

参考文章:
https://blog.csdn.net/balabaladyc/article/details/16873755
https://www.cnblogs.com/lakeone/p/5770290.html

  • 7
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
INADDR_LOOPBACK是一个常量,它表示绑定到回环地址(Loopback Address),通常是127.0.0.1。绑定到回环地址的套接字只能接收来自本地主机的连接请求,而不能接收来自其他主机的连接请求。\[1\]所以,如果你使用INADDR_LOOPBACK来绑定套接字,那么只有本地主机上的程序可以连接到该套接字。 #### 引用[.reference_title] - *1* [INADDR_ANY和INADDR_BROADCAST含义说明](https://blog.csdn.net/xiao3404/article/details/94223837)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Socket INADDR_ANY INADDR_LOOPBACK 127.0.0.1](https://blog.csdn.net/zhouqingxing/article/details/19165561)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [SOCKET bind INADDR_LOOPBACK和INADDR_ANY的区别](https://blog.csdn.net/w968516q/article/details/53519343)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值