蘑菇头表情包制作网站,wordpress 模板 下载,网络课程网站模板,dede模板 展柜网站源码广播#xff08;Broadcast#xff09;是一种网络通信方式#xff0c;它允许一台设备向网络中的所有其他设备发送消息。广播通常用于在网络上传递一些信息#xff0c;让所有设备都能接收并处理。在广播中#xff0c;通信的目标是整个网络而不是特定的单个设备。 向子网中… 广播Broadcast是一种网络通信方式它允许一台设备向网络中的所有其他设备发送消息。广播通常用于在网络上传递一些信息让所有设备都能接收并处理。在广播中通信的目标是整个网络而不是特定的单个设备。 向子网中多台计算机发送消息并且子网中所有的计算机都可以接收到发送方发送的消息每个广播消息都包含一个特殊的IP 地址这个 IP 中子网内主机标志部分的二进制全部为 1 。 a.只能在局域网中使用。 b.客户端需要绑定服务器广播使用的端口才可以接收到广播消息 在网络中有两种主要类型的广播 广域网广播WAN Broadcast 这种广播通过网络中的所有设备传播使得每个设备都能收到广播消息。这种广播通常在较小的局域网络中使用而在大规模的互联网中则不太常见。 局域网广播LAN Broadcast 这种广播仅限于局域网络内消息仅在同一局域网中的设备之间传播。局域网广播是一种常见的局域网络通信方式典型的例子包括 ARP地址解析协议请求DHCP动态主机配置协议请求等。
在IPv4网络中广播通常使用特殊的广播地址例如 局域网广播地址 通常是网络的最大地址例如如果网络是 192.168.1.0/24则广播地址是 192.168.1.255。 子网广播地址 在某些情况下也可以使用特定子网的广播地址。 在IPv6网络中广播被淘汰而被替代为多播Multicast和任播Anycast等更灵活的通信方式。 尽管广播在过去是一种常见的通信方式但由于其固有的安全和网络流量控制方面的缺点现代网络中越来越少使用广播。相反多播和任播等更精细的通信方式被广泛采用以更有效地管理网络通信。
// 设置广播属性的函数
int setsockopt(int sockfd, int level, int optname,const void *optval, socklen_t
optlen);
- sockfd : 文件描述符
- level : SOL_SOCKET
- optname : SO_BROADCAST
- optval : int类型的值为1表示允许广播
- optlen : optval的大小
服务器端
#include stdio.h
#include arpa/inet.h
#include unistd.h
#include string.h
#include stdlib.hint main() {// 1.创建一个通信的socketint fd socket(PF_INET, SOCK_DGRAM, 0);if(fd -1) {perror(socket);exit(-1);}// 2.设置广播属性int op 1;setsockopt(fd, SOL_SOCKET, SO_BROADCAST, op, sizeof(op));// 3.创建一个广播的地址struct sockaddr_in cliaddr;cliaddr.sin_family AF_INET;cliaddr.sin_port htons(9999);inet_pton(AF_INET, 192.168.4.255, cliaddr.sin_addr.s_addr);// 3.通信int num 0;while(1) {char sendBuf[128];sprintf(sendBuf, hello, client....%d\n, num);// 发送数据sendto(fd, sendBuf, strlen(sendBuf) 1, 0, (struct sockaddr *)cliaddr, sizeof(cliaddr));printf(广播的数据%s\n, sendBuf);sleep(1);}close(fd);return 0;
}
客户端
#include stdio.h
#include stdlib.h
#include unistd.h
#include string.h
#include arpa/inet.hint main() {// 1.创建一个通信的socketint fd socket(PF_INET, SOCK_DGRAM, 0);if(fd -1) {perror(socket);exit(-1);}// 2.客户端绑定本地的IP和端口struct sockaddr_in addr;addr.sin_family AF_INET;addr.sin_port htons(9999);addr.sin_addr.s_addr INADDR_ANY;int ret bind(fd, (struct sockaddr *)addr, sizeof(addr));if(ret -1) {perror(bind);exit(-1);}// 3.通信while(1) {char buf[128];// 接收数据int num recvfrom(fd, buf, sizeof(buf), 0, NULL, NULL);printf(server say : %s\n, buf);}close(fd);return 0;
}