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_indu 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.