0Pricing
C Academy · Leçon

Présentation des sockets

Bases de la communication réseau

Présentation des sockets est une leçon C Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C Academy comprend 4 leçons au total.

Qu’est-ce qu’un socket

Un socket est un point d’extrémité pour les communications réseau. Sur les systèmes POSIX, c’est un descripteur de fichier depuis lequel vous pouvez lire et écrire, ce qui permet à deux programmes d’échanger des données sur un réseau ou sur la même machine.

Le modèle client-serveur

La plupart des applications réseau utilisent le modèle client-serveur :

  • Le serveur associe un socket à une adresse et attend les connexions
  • Le client initie une connexion vers le serveur

Une fois la connexion établie, les deux parties envoient et reçoivent des données.

TCP ou UDP

Deux protocoles de transport principaux :

  • TCP (SOCK_STREAM) : fiable, ordonné et fondé sur une connexion
  • UDP (SOCK_DGRAM) : rapide, sans connexion ; des paquets peuvent être perdus ou réordonnés

Utilisez TCP pour la fiabilité et UDP pour les flux à faible latence.

Créer un socket

L’appel socket() renvoie un descripteur de fichier. Ses arguments sont la famille d’adresses (AF_INET pour IPv4), le type (SOCK_STREAM pour TCP) et le protocole (0 pour la valeur par défaut).

/* Conceptual: sockets need a network environment to run */
#include <sys/socket.h>
#include <netinet/in.h>

int create_tcp_socket(void) {
    int fd = socket(AF_INET, SOCK_STREAM, 0);
    /* fd < 0 means error; check with perror */
    return fd;
}

Structures d’adresse de socket

Une adresse IPv4 est décrite par struct sockaddr_in, qui contient la famille, le port et l’adresse IP. Les fonctions utilisent un struct sockaddr * générique ; vous devez donc effectuer une conversion de type.

#include <netinet/in.h>

void fill_addr(struct sockaddr_in *addr, unsigned short port) {
    addr->sin_family = AF_INET;
    addr->sin_port = htons(port);      /* host to network short */
    addr->sin_addr.s_addr = INADDR_ANY; /* all interfaces */
}

L’ordre des octets est important

Les réseaux utilisent le gros-boutiste (l’ordre des octets réseau). Effectuez les conversions avec :

  • htons / htonl : de l’hôte vers le réseau (entier court/long)
  • ntohs / ntohl : du réseau vers l’hôte

Convertissez toujours les ports et les adresses, sinon vous communiquerez avec le mauvais destinataire.

Conversion d’adresse IP

inet_pton convertit une adresse IP textuelle comme "127.0.0.1" en la forme binaire stockée dans sin_addr, et inet_ntop effectue l’opération inverse pour l’affichage.

#include <arpa/inet.h>
#include <netinet/in.h>

int set_ip(struct sockaddr_in *addr, const char *ip) {
    return inet_pton(AF_INET, ip, &addr->sin_addr); /* returns 1 on success */
}

Séquence des appels du serveur

Un serveur TCP appelle généralement, dans l’ordre :

  • socket() créer le socket
  • bind() l’associer à une adresse et à un port
  • listen() le rendre passif
  • accept() obtenir une connexion

Séquence des appels du client

Un client TCP est plus simple :

  • socket() créer le socket
  • connect() joindre l’adresse du serveur

Il peut ensuite utiliser send et recv sur le même descripteur.

Envoyer et recevoir

Utilisez send() et recv() (ou les fonctions génériques write() et read()). Les deux peuvent transférer moins d’octets que demandé ; le véritable code effectue donc des boucles jusqu’à ce que toutes les données soient traitées.

Toujours vérifier les valeurs de retour

Chaque appel lié aux sockets peut échouer. Une valeur de retour de -1 définit errno ; appelez perror pour signaler l’erreur. Un recv de 0 signifie que l’homologue a fermé la connexion. La robustesse des communications réseau dépend entièrement de la vérification des erreurs.

Vérification rapide

Testez votre compréhension des bases des sockets.

Récapitulatif

Vous avez appris les fondements de la programmation avec des sockets.

  • Un socket est un point d’extrémité réseau et un descripteur de fichier
  • Le modèle client-serveur utilise TCP (fiable) ou UDP (rapide)
  • Utilisez sockaddr_in avec htons et inet_pton
  • Serveur : socket, bind, listen, accept. Client : socket, connect

Questions Fréquemment Posées

La leçon « Présentation des sockets » est-elle gratuite ?

Oui — le texte complet de « Présentation des sockets » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C Academy, passe à CoddyKit PRO. Le cours C Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Présentation des sockets » ?

Bases de la communication réseau Tu pratiques C Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer C Academy ?

Aucune expérience préalable n'est requise. C Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « Présentation des sockets » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon C Academy ?

Oui. Chaque leçon C Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Présentation des sockets
  2. Serveur TCP
  3. Client TCP
  4. Gérer plusieurs clients
← Retour à C Academy