Table des matières
Introduction:
Dans les communications réseau, UDP (User Datagram Protocol) est un protocole sans connexion qui fournit une méthode de transmission de données rapide et efficace. Cet article va vous montrer comment écrire du code en langage C pour recevoir des messages UDP.
étape:
Étape 1 : Créer un socket
Tout d’abord, nous devons créer un socket pour la communication UDP. Vous pouvez utiliser socket()
la fonction pour créer un socket IPv4, l'exemple de code est le suivant :
#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;
}
Étape 2 : Recevoir un message
Ensuite, nous pouvons utiliser recvfrom()
la fonction pour recevoir des messages UDP du socket. L'exemple de code est le suivant :
#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;
}
Étape 3 : Terminer
Vous avez maintenant complété le code pour recevoir des messages UDP en langage C. Vous pouvez étendre et optimiser davantage le code selon vos besoins pour répondre aux besoins spécifiques des applications.
Fonction et explication des variables
Lorsque nous utilisons le langage C pour écrire du code de réception de messages UDP, nous devons définir certaines variables et utiliser certaines fonctions pour obtenir les fonctions requises. Voici une description détaillée de ces variables et fonctions :
variable:
-
sockfd
: Type entier, descripteur de socket. Un entier unique utilisé pour identifier le socket. Après avoir créé le socket, nous utiliserons cette variable pour effectuer des opérations sur le socket telles que la liaison, la réception, etc. -
serverAddr
:struct sockaddr_in
type, structure de l'adresse du serveur. Contient l'adresse et les informations de port du serveur. Nous devons lier le socket à cette adresse afin d'écouter des messages UDP spécifiques. -
buffer
: Tableau de caractères, utilisé pour stocker les messages UDP reçus. Après réception du message, nous le stockeronsbuffer
pour un traitement ultérieur. -
clientAddr
:struct sockaddr_in
type, structure de l'adresse client. Lorsque la fonction est appeléerecvfrom()
pour recevoir un message UDP, les informations d'adresse du client qui a envoyé le message seront stockées. -
addrLen
: type socklen_t, longueur de la structure d'adresse. Lors de l’appelrecvfrom()
de la fonction, la taille de la structure d’adresse doit être transmise.
fonction:
-
socket()
: Créer une fonction socket. Crée un socket en utilisant AF_INET comme famille d'adresses, SOCK_DGRAM comme type de socket et 0 comme protocole par défaut. Si la création échoue, -1 sera renvoyé. -
bind()
: fonction de liaison. Lie le socket créé à l'adresse du serveur spécifiée. Si la liaison échoue, -1 sera renvoyé. -
recvfrom()
: Fonction de réception. Recevez un message UDP du socket et stockez-le dans le tampon fourni. Il remplira égalementclientAddr
la structure pour fournir les informations d'adresse de la source du message. Si la réception échoue, -1 sera renvoyé. -
printf()
: Fonction de sortie standard. Utilisé pour imprimer les messages reçus sur la console. -
memset()
: Fonction de réglage de la mémoire. Utilisé pour initialiser les données dans le tampon à 0. Avant de recevoir un message, nous devons nous assurer que le tampon est vide. -
perror()
: Fonction d'impression de message d'erreur. Les messages d'erreur pertinents peuvent être imprimés dans le flux d'erreurs standard. Lorsqu'une erreur se produit dans une opération de socket, elle peut être utilisée pour afficher la cause de l'erreur. -
exit()
: Quitte la fonction. En cas d'erreur fatale, cette fonction peut être appelée pour terminer l'exécution du programme.
L'utilisation de ces variables et fonctions nous permet de créer des sockets, de lier des adresses, de recevoir des messages et d'effectuer des traitements ultérieurs. En les utilisant correctement, nous pouvons réaliser la fonction de réception de messages UDP.
Résumer:
Cet article vous montre comment écrire du code en langage C pour implémenter la réception de messages UDP. En créant un socket et en utilisant recvfrom()
une fonction pour recevoir des messages, vous pouvez facilement implémenter la fonction de communication UDP dans votre propre programme. J'espère que cela vous aidera ! N'hésitez pas à me poser des questions.