»
(008)CubeIDE实现USB外设*
(010)Linux UDP广播注意事项
(018)C99 的指针*
(019)C99 只有值赋值,没有move*
(022)POSIX线程库pthread的同步锁*
(023)POSIX线程库pthread的多线程*
(027)C99标准库中的计时与等待 *
(028)C语言中的高精度计算库GMP *
(029)C语言中的Web服务*
(030)C语言中的字符转码ICU*
(031)从几个方面显然C语言比C++效率高*
来自ChatGPT的UDP广播的总结:
1、创建 UDP 套接字
int sockfd = socket(AF_INET, SOCK_DGRAM, 0);报错则 sockfd < 0
2、开启套接字为广播模式
setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &trueVal, sizeof(trueVal))); 如果报错则:返回值 < 0
3、绑定发送广播用的本机IP和本机端口号(UDP不需要握手,如果只发送,此步可以省略)
memset(&client_addr, 0, sizeof(client_addr));
client_addr.sin_family = AF_INET;
client_addr.sin_addr.s_addr = INADDR_ANY;//收发程序只监听端口,不固定IP
client_addr.sin_port = htons(PORT);
bind(sock_fd, (const struct sockaddr*)&client_addr, sizeof(client_addr))报错则:返回值 < 0
4、发向目标广播地址
struct sockaddr_in dest_addr;
memset(&dest_addr, 0, sizeof(dest_addr));
dest_addr.sin_family = AF_INET;
dest_addr.sin_port = htons(12345); // 设置目标端口
dest_addr.sin_addr.s_addr = inet_addr("192.168.1.255"); // 设置广播地址
sendto(sock_fd, ctnt, strlen(ctnt), 0, (const struct sockaddr*)&dest_addr, sizeof(dest_addr));
需要注意的是:发送端必须开启 SO_BROADCAST 广播模式。