一、基础概念
二、UDP广播收发的优势
三、类型(从不同角度看)
四、应用场景
五、UDP广播收发示例代码(Linux下使用C语言)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define BROADCAST_PORT 8888
#define BROADCAST_IP "192.168.1.255"
#define BUFFER_SIZE 1024
int main() {
int sockfd;
struct sockaddr_in broadcastAddr;
char *buffer = "Hello, this is a UDP broadcast message!";
// 创建UDP套接字
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
perror("socket");
exit(1);
}
// 设置套接字可广播
int broadcastEnable = 1;
int ret = setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &broadcastEnable, sizeof(broadcastEnable));
if (ret < 0) {
perror("setsockopt");
close(sockfd);
exit(1);
}
// 配置广播地址结构
memset(&broadcastAddr, 0, sizeof(broadcastAddr));
broadcastAddr.sin_family = AF_INET;
broadcastAddr.sin_port = htons(BROADCAST_PORT);
inet_pton(AF_INET, BROADCAST_IP, &broadcastAddr.sin_addr);
// 发送广播消息
if (sendto(sockfd, buffer, strlen(buffer), 0, (struct sockaddr *)&broadcastAddr, sizeof(broadcastAddr)) < 0) {
perror("sendto");
close(sockfd);
exit(1);
}
close(sockfd);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define BROADCAST_PORT 8888
#define BUFFER_SIZE 1024
int main() {
int sockfd;
struct sockaddr_in serverAddr, clientAddr;
socklen_t addrLen = sizeof(clientAddr);
char buffer[BUFFER_SIZE];
// 创建UDP套接字
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
perror("socket");
exit(1);
}
// 配置服务器地址结构
memset(&serverAddr, 0, sizeof(serverAddr));
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(BROADCAST_PORT);
serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);
// 绑定套接字到指定端口
if (bind(sockfd, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) < 0) {
perror("bind");
close(sockfd);
exit(1);
}
// 接收广播消息
int recvLen = recvfrom(sockfd, buffer, BUFFER_SIZE, 0, (struct sockaddr *)&clientAddr, &addrLen);
if (recvLen < 0) {
perror("recvfrom");
close(sockfd);
exit(1);
}
buffer[recvLen] = '\0';
printf("Received broadcast message: %s
", buffer);
close(sockfd);
return 0;
}
六、可能遇到的问题及解决方法
领取专属 10元无门槛券
手把手带您无忧上云