Table des matières
Serveur TCP de base en C
Client TCP de base en C
Comment compiler et courir
Points clés
Notes pour Windows
Maison développement back-end C++ Comment écrire un client / serveur TCP simple en C

Comment écrire un client / serveur TCP simple en C

Aug 17, 2025 am 01:50 AM
tcp c++

La réponse est que l'écriture d'un client et serveur TCP simples nécessite l'interface de programmation de socket fournie par le système d'exploitation. Le serveur termine la communication en créant des prises, des adresses de liaison, en écoutant les ports, en acceptant les connexions et en envoyant et recevant des données. Le client réalise l'interaction en créant des sockets, en se connectant aux serveurs, en envoyant des demandes et en recevant des réponses. L'exemple de code montre l'implémentation de base de l'utilisation de l'API Socket Berkeley sur Linux ou MacOS, y compris les fichiers d'en-tête nécessaires, les paramètres du port, la gestion des erreurs et la version des ressources. Après la compilation, exécutez d'abord le serveur, puis exécutez le client pour obtenir une communication bidirectionnelle. La plate-forme Windows doit initialiser la bibliothèque WinSock. Cet exemple est un modèle d'E / S de blocage, adapté à l'apprentissage de la programmation de base de socket.

Comment écrire un client / serveur TCP simple en C

L'écriture d'un client et serveur TCP simples en C implique l'utilisation de l'interface de programmation Socket fournie par le système d'exploitation (généralement l'API Berkeley Sockets sur les systèmes de type UNIX, ou WinSock sur Windows). Vous trouverez ci-dessous un exemple de base qui fonctionne sur Linux ou MacOS. Pour Windows, de légères modifications sont nécessaires (comme initialiser Winsock).


Serveur TCP de base en C

Le serveur écoute un port, accepte une connexion client, reçoit un message et envoie une réponse.

 // server.cpp
#include <iostream>
#include <cstring>
#include <sys / socket.h>
#include <netinet / in.h>
#include <unistd.h>

int main () {
    int server_fd, new_socket;
    struct sockaddr_in adresse;
    int addRlen = sizeof (adresse);
    tampon char [1024] = {0};
    const char * hello = "Hello from Server";

    // Créer un descripteur de fichiers de socket
    if ((server_fd = socket (af_inet, sock_stream, 0)) == 0) {
        perror ("socket a échoué");
        exit (exit_failure);
    }

    // Définir l&#39;adresse du serveur
    adresse.sin_family = af_inet;
    adresse.sin_addr.s_addr = inaddr_any;
    adresse.sin_port = htons (8080);

    // lier la prise
    if (bind (server_fd, (struct sockaddr *) & adresse, sizeof (adresse)) <0) {
        perror ("Bind a échoué");
        close (server_fd);
        exit (exit_failure);
    }

    // écoute les connexions entrantes
    if (écouter (server_fd, 3) <0) {
        Perror ("écouter");
        close (server_fd);
        exit (exit_failure);
    }

    std :: cout << "Écoute du serveur sur le port 8080 ... \ n";

    // accepte une connexion
    if ((new_socket = accepter (server_fd, (struct sockaddr *) & adresse, (socklen_t *) & addrlen)) <0) {
        Perror ("accepter");
        close (server_fd);
        exit (exit_failure);
    }

    // Lire les données du client
    lire (new_socket, tampon, 1024);
    std :: cout << "Client:" << Buffer << std :: endl;

    // Envoyez la réponse
    envoyer (new_socket, bonjour, strlen (bonjour), 0);
    std :: cout << "bonjour message envoyé \ n";

    // nettoyage
    close (new_socket);
    close (server_fd);
    retour 0;
}

Client TCP de base en C

Le client se connecte au serveur, envoie un message et lit la réponse.

 // client.cpp
#include <iostream>
#include <cstring>
#include <sys / socket.h>
#include <arpa / inet.h>
#include <unistd.h>

int main () {
    Int sock = 0;
    struct sockaddr_in sert_addr;
    const char * hello = "Hello from client";
    tampon char [1024] = {0};

    // Créer une prise
    if ((sock = socket (af_inet, sock_stream, 0)) <0) {
        Perror ("Erreur de création de socket");
        retour -1;
    }

    serv_addr.sin_family = af_inet;
    serv_addr.sin_port = htons (8080);

    // convertir l&#39;adresse IPv4 du texte en binaire
    if (inet_pton (af_inet, "127.0.0.1", & serv_addr.sin_addr) <= 0) {
        perror ("adresse / adresse non valide non prise en charge");
        Fermer (chaussette);
        retour -1;
    }

    // Connectez-vous au serveur
    if (connect (sock, (struct sockaddr *) & serv_addr, sizeof (serv_addr)) <0) {
        perror ("Connexion a échoué");
        Fermer (chaussette);
        retour -1;
    }

    // Envoyer un message au serveur
    Envoyer (Sock, bonjour, strlen (bonjour), 0);
    std :: cout << "bonjour message envoyé \ n";

    // Lire la réponse
    lire (chaussette, tampon, 1024);
    std :: cout << "Server:" << buffer << std :: endl;

    // nettoyage
    Fermer (chaussette);
    retour 0;
}

Comment compiler et courir

Sur Linux / macOS:

 G serveur.
g client.cpp -o client

# Terminal 1
./serveur

# Terminal 2 (après l&#39;exécution du serveur)
./client

Sortie attendue:

  • Impressions du serveur: Server listening on port 8080... , puis le message client, puis Hello message sent .
  • Imprimés du client: Hello message sent , puis Server: Hello from server .

Points clés

  • En-têtes : sys/socket.h , netinet/in.h , arpa/inet.h , unistd.h sont essentiels pour la programmation de socket sur Unix.
  • Port : Le serveur se lie au port 8080. Assurez-vous qu'il est gratuit.
  • Adresse IP : le client utilise 127.0.0.1 (LocalHost). Modifier si vous connectez à un serveur distant.
  • Blocage E / S : Ces exemples utilisent des prises de blocage. Les applications réelles peuvent utiliser des E / S non bloquantes ou plusieurs threads.
  • Gestion des erreurs : vérifiez toujours les valeurs de retour des fonctions de socket.

Notes pour Windows

Sur Windows, vous devez:

  • Inclure <winsock2.h> et lien avec ws2_32.lib .
  • Appelez WSAStartup() avant d'utiliser des sockets.
  • Appelez WSACleanup() à la fin.

Exemple d'extrait:

 Wsadata Wsadata;
Wsastartup (makeword (2,2), & wsadata);
// ... code de prise ...
Wsacleanup ();

Il s'agit d'un exemple de travail minimal. En production, vous ajouteriez une récupération d'erreur, une prise en charge de plusieurs clients (en utilisant fork , les threads ou les E / S asynchrones) et une meilleure cadrage de données.

Fondamentalement, les éléments essentiels pour faire parler une paire de douilles.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Stock Market GPT

Stock Market GPT

Recherche d'investissement basée sur l'IA pour des décisions plus intelligentes

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

C vecteur de cordes Exemple C vecteur de cordes Exemple Aug 21, 2025 am 04:02 AM

L'utilisation de base de STD :: Vector comprend: 1. Declare Vector; 2. Ajouter des éléments avec push_back (); 3. Initialiser avec la liste d'initialisation; 4. Transfert de boucle avec portée pour; 5. Éléments d'accès via l'index ou le dos (); 6. Affectation directe des valeurs pour modifier les éléments; 7. Supprimer les éléments finaux avec pop_back (); 8. Appelez la taille () pour obtenir le nombre d'éléments; Il est recommandé d'utiliser Constauto et d'éviter de copier, de pré-alloquer la réserve () pour améliorer les performances et faire attention à la vérification qu'il n'est pas vide avant l'accès. Cette structure de données est un moyen efficace et préféré de gérer les listes de chaînes.

Comment lier les bibliothèques en C Comment lier les bibliothèques en C Aug 21, 2025 am 08:33 AM

Pour lier les bibliothèques en C, vous devez utiliser -L pour spécifier le chemin de la bibliothèque lors de la compilation, -l pour spécifier le nom de la bibliothèque et utiliser -I pour inclure le chemin du fichier d'en-tête pour vous assurer que les fichiers de bibliothèque statique ou dynamique existent et sont nommés correctement. Si nécessaire, intégrez le chemin de la bibliothèque d'exécution via -wl, -rpath, afin que le compilateur puisse trouver la déclaration, le linker peut trouver l'implémentation et que le programme puisse être construit avec succès et exécuter.

Comment convertir une chaîne en majuscules ou en minuscules en C Comment convertir une chaîne en majuscules ou en minuscules en C Sep 01, 2025 am 06:36 AM

Pour convertir une chaîne en majuscules ou en minuscules, utilisez la transformée STD :: combinée avec :: toupper ou :: Tolower Fonctions. 1. Inclure les fichiers d'en-tête et; 2. Appelez STD :: Transformer, transmettez l'itérateur de démarrage et de fin de la chaîne et spécifiez l'itérateur de sortie à str.begin () pour le modifier en place; 3. Utilisez :: Toupper pour convertir chaque caractère en majuscules, ou utilisez :: Tolower en minuscules. Cette méthode convient aux chaînes ASCII et le code est simple et efficace. Pour le texte non ASCII ou UNICODE, les bibliothèques telles que les soins intensifs doivent être utilisées pour assurer un traitement approprié. Bien que le cycle manuel soit très lisible, il est moins efficace. Par conséquent, il est recommandé d'utiliser STD ::

Comment passer les arguments par référence vs par valeur en c Comment passer les arguments par référence vs par valeur en c Aug 22, 2025 am 08:14 AM

En C, la méthode de passage des paramètres affecte les performances, la sécurité et la modification des données d'origine: utilisez la valeur lors du passage des types de base ou en cas de modification, utilisez la référence lorsque vous modifiez les objets et lorsque vous modifiez, utilisez la référence lorsque vous lisez de grands objets et utilisez la référence const lorsque vous lisez de grands objets, évitez de retourner les références vers des variables locales pour assurer l'efficacité et la sécurité.

Comment rédiger un code d'exception en sécurité en C? Comment rédiger un code d'exception en sécurité en C? Aug 29, 2025 am 08:17 AM

Useraiitotièreresourcemangation deobjecterlifetimes, assurant que les effets de la réadaptation

Call C Fonction C à partir de C Exemple Call C Fonction C à partir de C Exemple Aug 25, 2025 am 10:01 AM

Pour appeler les fonctions C en C, vous devez utiliser le "C" externe pour éviter la modification du nom. Les étapes spécifiques sont: 1. Écrivez le fichier d'en-tête de fonction C Hello.h et enveloppez l'extern "C" avec #ifdef__cplusplus pour assurer la compatibilité; 2. Implémentez la fonction c say_hello () et incluez le fichier d'en-tête dans le programme principal main.cpp de c; 3. Utilisez G pour compiler le fichier C et lier le fichier cible C ou compiler directement le lien; 4. Exécutez le programme pour sortir correctement les résultats, indiquant que la fonction C était appelée avec succès. L'ensemble du processus doit s'assurer que la méthode de la déclaration et de la compilation est correcte, et le programme peut s'exécuter normalement et sortir "Callingcfunc

Qu'est-ce que Cronos (Cro Coin)? Est-ce un bon investissement? Prévisions de prix futurs de la pièce CRO Qu'est-ce que Cronos (Cro Coin)? Est-ce un bon investissement? Prévisions de prix futurs de la pièce CRO Sep 02, 2025 pm 08:51 PM

Contenu Qu'est-ce que Cronos (CRO) Combien de pièces de crocro y a-t-il des fonctions principales CRO et Solana Comparaison de l'équipe technique derrière CRO et les nouvelles et les événements importants sont CRO un bon investissement CRO prévoient des prix à long terme CRO2031-2036 Prévision des prix FAQ CRONOS (CRO) Le projet est bien connu pour sa position à l'intersection des blockchains Ethereum et Cosmos. Comme base

C Exemple d'espace de noms en ligne C Exemple d'espace de noms en ligne Sep 01, 2025 am 02:01 AM

InlineNamespace est principalement utilisé pour le contrôle de version et l'exposition transparente des symboles, et ses membres peuvent être directement accessibles par l'espace de noms extérieur. ① Le nom dans InlineNamespace est considéré comme un membre direct de l'espace de noms extérieur et peut être utilisé sans spécifier l'espace de noms intérieur; ② Il est couramment utilisé pour la gestion de la version de la bibliothèque. Si V1 est défini sur Inline et est modifié en V2 pendant la mise à niveau, l'ancienne version est toujours accessible via un espace de noms explicite; ③ Prise en charge de la conception de compatibilité ABI, le nouveau type de version est exposé par défaut et l'ancienne interface binaire est conservée dans des espaces de noms non en ligne; ④ peut être imbriqué et existence multiple, mais généralement un seul est élargi par défaut; ⑤ Notez qu'un espace de noms extérieur ne peut avoir qu'un seul espace de sous-nom en ligne par défaut, et les utilisateurs doivent être évités

See all articles