设置组播地址和端口的关键步骤
- 创建套接字:使用
socket
函数创建 UDP 套接字,指定协议族为 AF_INET
,套接字类型为 SOCK_DGRAM
,协议为 0
。
- 设置组播选项:
- 使用
setsockopt
函数设置 IP_ADD_MEMBERSHIP
选项,加入指定的组播组。这需要指定组播地址和本地接收接口。
- 还可能需要设置其他相关选项,如
IP_MULTICAST_TTL
(设置组播数据包的生存时间)等,根据具体需求而定。
- 绑定端口:使用
bind
函数将套接字绑定到指定的本地端口。
绑定套接字到指定端口的C语言代码片段
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#define PORT 8888
#define GROUP "224.1.1.1"
#define INTERFACE "eth0"
int main() {
int sockfd;
struct sockaddr_in servaddr;
// 创建套接字
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd < 0) {
perror("socket creation failed");
exit(EXIT_FAILURE);
}
// 初始化服务器地址结构
memset(&servaddr, 0, sizeof(servaddr));
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = INADDR_ANY;
servaddr.sin_port = htons(PORT);
// 绑定套接字到指定端口
if (bind(sockfd, (const struct sockaddr *)&servaddr, sizeof(servaddr)) < 0) {
perror("bind failed");
close(sockfd);
exit(EXIT_FAILURE);
}
printf("Socket bound to port %d\n", PORT);
// 后续可进行组播相关设置等操作
close(sockfd);
return 0;
}