UDP 广播发送方
1.创建套接字:使用socket()函数创建一个UDP套接字。
2.设置套接字选项:使用setsockopt()函数设置SO_BROADCAST选项以允许广播。
3.发送数据:使用sendto()函数将数据发送到特定的广播地址和端口。
c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <netinet/in.h>
#include <sys/socket.h>
#define PORT 8080
#define BROADCAST_IP "255.255.255.255"
int main() {
int sockfd;
struct sockaddr_in broadcastAddr;
char broadcast_data[] = "Hello, UDP Broadcast!";
int broadcast_len = strlen(broadcast_data) + 1;
// 创建UDP套接字
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
perror("socket() failed");
exit(EXIT_FAILURE);
}
// 设置广播选项
int opt = 1;
if (setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &opt, sizeof(opt)) < 0) {
perror("setsockopt() failed");
exit(EXIT_FAILURE);
}
memset(&broadcastAddr, 0, sizeof(broadcastAddr));
broadcastAddr.sin_family = AF_INET;
broadcastAddr.sin_addr.s_addr = inet_addr(BROADCAST_IP);
broadcastAddr.sin_port = htons(PORT);
// 发送广播数据
if (sendto(sockfd, broadcast_data, broadcast_len, 0,
(struct sockaddr *)&broadcastAddr, sizeof(broadcastAddr)) < 0) {
perror("sendto() sent a failed");
exit(EXIT_FAILURE);
}
printf("Broadcast sent\n");
close(sockfd);
return 0;
}
UDP 广播接收方
- 创建套接字:与发送方相同。
- 绑定套接字:接收方需要绑定到一个特定的IP地址和端口上,或者使用INADDR_ANY来监听所有接口的数据。
- 接收数据:使用recvfrom()函数接收数据。