0Pricing
C Academy · Leçon

Client TCP

Connectez-vous et envoyez

Client TCP est une leçon C Academy gratuite sur CoddyKit. Ceci est la leçon 3 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.

Construire un client TCP

Un client TCP se connecte à un serveur, puis envoie et reçoit des données. Son cycle de vie est plus court que celui du serveur : créer un socket, se connecter, communiquer, puis fermer la connexion.

Étape 1 : créer le socket

Comme pour le serveur, créez un socket de flux pour TCP sur IPv4.

#include <sys/socket.h>
#include <stdio.h>

int make_client_socket(void) {
    int fd = socket(AF_INET, SOCK_STREAM, 0);
    if (fd < 0) perror("socket");
    return fd;
}

Étape 2 : décrire le serveur

Remplissez un sockaddr_in avec le port et l’adresse IP du serveur. Utilisez inet_pton pour convertir la chaîne d’adresse IP en notation décimale pointée vers sa forme binaire.

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

int set_server(struct sockaddr_in *addr, const char *ip, unsigned short port) {
    addr->sin_family = AF_INET;
    addr->sin_port = htons(port);
    return inet_pton(AF_INET, ip, &addr->sin_addr); /* 1 on success */
}

Étape 3 : se connecter

connect() effectue la négociation TCP avec le serveur. En cas de succès, le socket est prêt à échanger des données ; en cas d’échec, errno est défini (par exemple, si la connexion est refusée).

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

int do_connect(int fd, struct sockaddr_in *addr) {
    if (connect(fd, (struct sockaddr *)addr, sizeof *addr) < 0) {
        perror("connect"); return -1;
    }
    return 0;
}

Aucune association nécessaire

Les clients ignorent généralement bind : le noyau attribue automatiquement un port source éphémère pendant connect. Vous n’associez un client à un port que si vous avez besoin d’un port source précis.

Étape 4 : envoyer des données

Après la connexion, écrivez une requête avec send. Faites une boucle pour vous assurer que l’intégralité du tampon est envoyée.

#include <sys/socket.h>
#include <string.h>

int send_all(int fd, const char *data) {
    size_t left = strlen(data);
    const char *p = data;
    while (left > 0) {
        ssize_t n = send(fd, p, left, 0);
        if (n <= 0) return -1;
        p += n; left -= (size_t)n;
    }
    return 0;
}

Étape 5 : recevoir la réponse

Lisez la réponse du serveur avec recv. Ajoutez un caractère nul à la fin avant de traiter le tampon comme une chaîne.

#include <sys/socket.h>
#include <stdio.h>

void read_reply(int fd) {
    char buf[512];
    ssize_t n = recv(fd, buf, sizeof buf - 1, 0);
    if (n > 0) { buf[n] = 0; printf("server said: %s\n", buf); }
    else if (n == 0) printf("server closed connection\n");
}

Lire jusqu’à la fermeture

Un appel à recv peut ne pas renvoyer la réponse complète. Répétez l’opération jusqu’à ce que recv renvoie 0 (fermeture par l’homologue) pour lire une réponse complète arrivée en plusieurs parties.

#include <sys/socket.h>
#include <stdio.h>

void drain(int fd) {
    char buf[256]; ssize_t n;
    while ((n = recv(fd, buf, sizeof buf, 0)) > 0)
        fwrite(buf, 1, (size_t)n, stdout);
}

Étape 6 : fermer

Appelez close(fd) pour terminer la connexion et libérer le descripteur. Cela envoie un FIN TCP afin que le serveur sache que le client a terminé.

#include <unistd.h>

void finish(int fd) {
    close(fd);
}

Fermeture partielle avec shutdown

shutdown(fd, SHUT_WR) ferme uniquement le sens d’écriture et signale la fin de la requête, tout en permettant au client de lire la réponse. Cette fonction est utile pour les protocoles de type requête-réponse.

Gérer les échecs de connexion

Erreurs courantes côté client : ECONNREFUSED (aucun serveur n'est à l'écoute), ETIMEDOUT (hôte inaccessible) et EHOSTUNREACH. Vérifiez toujours connect et signalez clairement les échecs à l'utilisateur.

Vérification rapide

Testez votre compréhension des clients TCP.

Récapitulatif

Vous avez créé un client TCP.

  • créer une socket, puis appeler connect sur le sockaddr_in du serveur
  • Aucun bind n'est nécessaire ; le noyau choisit un port source
  • envoyer la requête, recevoir la réponse avec recv (boucler pour obtenir toutes les données)
  • appeler close ou shutdown une fois terminé ; gérer les échecs de connexion

Questions Fréquemment Posées

La leçon « Client TCP » est-elle gratuite ?

Oui — le texte complet de « Client TCP » 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 « Client TCP » ?

Connectez-vous et envoyez 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 3 sur 4.

Combien de temps prend la leçon « Client TCP » ?

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