Use a linguagem C para realizar a recepção de mensagens UDP

Introdução:

Na comunicação em rede, o UDP (User Datagram Protocol) é um protocolo sem conexão que fornece um método de transmissão de dados rápido e eficiente. Este artigo mostrará como escrever código em linguagem C para receber mensagens UDP.

insira a descrição da imagem aqui

etapa:

Etapa 1: crie um soquete

Primeiro, precisamos criar um soquete para comunicação UDP. Você pode usar socket()a função para criar um soquete IPv4, o código de exemplo é o seguinte:

#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>

int main() {
    
    
    int sockfd;
    struct sockaddr_in serverAddr;

    sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    if (sockfd < 0) {
    
    
        perror("Socket creation failed");
        exit(EXIT_FAILURE);
    }

    // 设置服务器地址和端口
    serverAddr.sin_family = AF_INET;
    serverAddr.sin_port = htons(8888); // 指定UDP监听端口
    serverAddr.sin_addr.s_addr = INADDR_ANY;

    // 将套接字与服务器地址绑定
    if (bind(sockfd, (struct sockaddr*)&serverAddr, sizeof(serverAddr)) < 0) {
    
    
        perror("Binding failed");
        exit(EXIT_FAILURE);
    }

    // 在这里可以开始接收消息
    // ...

    close(sockfd);

    return 0;
}

Etapa 2: receber mensagem

A seguir, podemos usar recvfrom()a função para receber mensagens UDP do soquete. O código de exemplo é o seguinte:

#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>

int main() {
    
    
    // 之前的代码...

    char buffer[1024];
    struct sockaddr_in clientAddr;
    socklen_t addrLen = sizeof(clientAddr);
    
    while (1) {
    
    
        memset(buffer, 0, sizeof(buffer));
        
        // 接收消息
        ssize_t recvSize = recvfrom(sockfd, buffer, sizeof(buffer)-1, 0,
                                    (struct sockaddr*)&clientAddr, &addrLen);

        if(recvSize < 0) {
    
    
            perror("Receiving failed");
            exit(EXIT_FAILURE);
        }

        buffer[recvSize] = '\0';

        // 处理接收到的消息
        printf("Received message: %s\n", buffer);
    }

    // 之后的代码...

    return 0;
}

Etapa 3: Concluir

Agora você completou o código para receber mensagens UDP em linguagem C. Você pode estender e otimizar ainda mais o código conforme necessário para atender às necessidades específicas do aplicativo.

Explicação de funções e variáveis

Ao usar a linguagem C para escrever o código de recebimento de mensagens UDP, precisamos definir algumas variáveis ​​e usar algumas funções para obter as funções necessárias. A seguir está uma descrição detalhada dessas variáveis ​​e funções:

variável:

  • sockfd: Tipo inteiro, descritor de soquete. Um inteiro exclusivo usado para identificar o soquete. Após criar o soquete, usaremos esta variável para realizar operações de soquete como vincular, receber, etc.

  • serverAddr: struct sockaddr_intipo, estrutura de endereço do servidor. Contém o endereço do servidor e informações de porta. Precisamos vincular o soquete a esse endereço para ouvir mensagens UDP específicas.

  • buffer: Matriz de caracteres, usada para armazenar mensagens UDP recebidas. Depois de receber a mensagem, iremos armazená-la bufferpara processamento posterior.

  • clientAddr: struct sockaddr_intipo, estrutura de endereço do cliente. Quando a função é chamada recvfrom()para receber uma mensagem UDP, serão armazenadas as informações de endereço do cliente que enviou a mensagem.

  • addrLen: tipo socklen_t, comprimento da estrutura de endereço. Ao chamar recvfrom()a função, o tamanho da estrutura de endereço precisa ser passado.

função:

  • socket(): Crie uma função de soquete. Cria um soquete usando AF_INET como família de endereços, SOCK_DGRAM como tipo de soquete e 0 como protocolo padrão. Se a criação falhar, -1 será retornado.

  • bind(): função de ligação. Vincula o soquete criado ao endereço do servidor especificado. Se a ligação falhar, -1 será retornado.

  • recvfrom(): Função de recepção. Receba uma mensagem UDP do soquete e armazene no buffer fornecido. Ele também preencherá clientAddra estrutura para fornecer as informações de endereço da origem da mensagem. Se a recepção falhar, -1 será retornado.

  • printf(): Função de saída padrão. Usado para imprimir mensagens recebidas no console.

  • memset(): Função de configuração de memória. Usado para inicializar os dados no buffer como 0. Antes de receber uma mensagem, precisamos ter certeza de que o buffer está vazio.

  • perror(): Função de impressão de mensagem de erro. Mensagens de erro relevantes podem ser impressas no fluxo de erros padrão. Quando ocorre um erro em uma operação de soquete, ele pode ser usado para gerar a causa do erro.

  • exit(): Sai da função. No caso de um erro fatal, esta função pode ser chamada para encerrar a execução do programa.

O uso dessas variáveis ​​e funções nos permite criar soquetes, vincular endereços, receber mensagens e realizar processamento adicional. Ao utilizá-los corretamente, podemos realizar a função de recebimento de mensagens UDP.

Resumir:

Este artigo mostra como escrever código em linguagem C para implementar a recepção de mensagens UDP. Ao criar um soquete e usar recvfrom()uma função para receber mensagens, você pode implementar facilmente a função de comunicação UDP em seu próprio programa. Espero que isso ajude você! Fique à vontade para me fazer qualquer pergunta.

Acho que você gosta

Origin blog.csdn.net/lzyzuixin/article/details/132226761
Recomendado
Clasificación