浙江天奥建设集团网站中山模板建站软件
web/
2025/10/1 21:06:41/
文章来源:
浙江天奥建设集团网站,中山模板建站软件,企业信用信息公示系统查询官网,室内装修公司哪家好1.概念 如果同时发给局域网中的所有主机#xff0c;称为广播
我们可以使用命令查看我们Linux下当前的广播地址#xff1a;ifconfig 2.广播地址 以192.168.1.0 (255.255.255.0) 网段为例#xff0c;最大的主机地址192.168.1.255代表该网段的广播地址#xff08;具体以ifcon…1.概念 如果同时发给局域网中的所有主机称为广播
我们可以使用命令查看我们Linux下当前的广播地址ifconfig 2.广播地址 以192.168.1.0 (255.255.255.0) 网段为例最大的主机地址192.168.1.255代表该网段的广播地址具体以ifconfig 命令查看到的 broadcast 后面的为准发到该地址的数据包被所有的主机接收。
注255.255.255.255在所有网段中都代表广播地址。
广播能发给局域网所有主机的原理
因为广播的数据包比较特殊他的目的mac地址全是fff:ff:ff:ff:ff:ff 这个数据包会发给交换机交换机是工作在链路层的交换机看到这样目的mac全是f的数据包就会将该数据包发给局域网内的所有主机。到达主机后进行拆包看到目的mac是广播的mac则允许通过。到达网络层一看IP地址是广播的IP地址则可以通过。到达传输层只要端口号匹配则数据就能到达应用层。
广播的应用ARP请求通过ip地址获取对方的mac地址使用的就是广播。
3.代码实现
/* 使用udp实现广播功能当我们执行代码时 ./file send----》执行发送广播代码 ./file recv----》执行接收广播代码 默认端口为9999 */
#include stdio.h
#include sys/types.h
#include sys/socket.h
#include netinet/in.h
#include arpa/inet.h
#include string.h
#include unistd.h
int broadcast_send(int port)
{ //1.创建udp套接字int sockfd socket(AF_INET, SOCK_DGRAM, 0);if(sockfd 0){ perror(socket error);return -1;}//2.开启广播int on1;int ret setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, on, sizeof(on));if(ret 0){ perror(setsockopt error);goto err;}//3.发送数据到广播地址char buffer[]hello world;struct sockaddr_in dest_addr;memset(dest_addr, 0, sizeof(dest_addr));dest_addr.sin_family AF_INET;//地址族IPV4dest_addr.sin_port htons(port);//设置端口号dest_addr.sin_addr.s_addr inet_addr(192.168.19.255);//设置广播地址//把数据发往广播地址ret sendto(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr*)dest_addr, sizeof(dest_addr));if(ret 0){ perror(sendto error);goto err;}
err://4.关闭套接字close(sockfd);return 0;
}
int broadcast_recv(int port)
{ //1.创建udp套接字int sockfd socket(AF_INET, SOCK_DGRAM, 0);if(sockfd 0){ perror(socket error);return -1;}//设置端口地址复用int on1;int rt setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, on, sizeof(on));if(rt 0){ perror(setsockopt error);goto recverr;}//2.绑定地址struct sockaddr_in src_addr;memset(src_addr, 0, sizeof(src_addr));src_addr.sin_family AF_INET;//地址族IPV4src_addr.sin_port htons(port);//设置端口号src_addr.sin_addr.s_addr htonl(INADDR_ANY);int ret bind(sockfd, (struct sockaddr*)src_addr, sizeof(src_addr));if(ret 0){ perror(bind error);goto recverr;}//3.接收数据char buffer[128]{ 0};struct sockaddr_in sendaddr;socklen_t len sizeof(sendaddr);ret recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr*)sendaddr, len);if(ret 0){ perror(recvfrom error);goto recverr;}printf(接到数据:%s\n, buffer);
recverr://4.关闭套接字close(sockfd);return 0;
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/85251.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!