MST

星途 面试题库

面试题:C语言UDP组播基础

在Linux环境下使用C语言进行UDP组播编程,简述设置组播地址和端口的关键步骤,并且写出绑定套接字到指定端口的C语言代码片段。
13.3万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试

设置组播地址和端口的关键步骤

  1. 创建套接字:使用 socket 函数创建 UDP 套接字,指定协议族为 AF_INET,套接字类型为 SOCK_DGRAM,协议为 0
  2. 设置组播选项
    • 使用 setsockopt 函数设置 IP_ADD_MEMBERSHIP 选项,加入指定的组播组。这需要指定组播地址和本地接收接口。
    • 还可能需要设置其他相关选项,如 IP_MULTICAST_TTL(设置组播数据包的生存时间)等,根据具体需求而定。
  3. 绑定端口:使用 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;
}