{"id":7568,"date":"2026-04-03T07:49:32","date_gmt":"2026-04-03T06:49:32","guid":{"rendered":"https:\/\/workboot.fr\/ciela\/?page_id=7568"},"modified":"2026-04-03T08:27:34","modified_gmt":"2026-04-03T07:27:34","slug":"sockets-en-c-ansi","status":"publish","type":"page","link":"https:\/\/workboot.fr\/ciela\/sockets-en-c-ansi\/","title":{"rendered":"Sockets en C ansi"},"content":{"rendered":"\n<pre class=\"wp-block-code\"><code>serveur_fd = socket(AF_INET, SOCK_STREAM, 0)\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>AF_INET : Famille d&rsquo;adresses IPv4<\/li>\n\n\n\n<li>SOCK_STREAM : Type de socket (TCP, fiable, connexion orient\u00e9e flux)<\/li>\n\n\n\n<li>0 : Protocole par d\u00e9faut (TCP pour SOCK_STREAM)<\/li>\n\n\n\n<li>Retour : Descripteur de fichier (entier) ou -1 si erreur<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Serveur TCP<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;stdio.h>\n#include &lt;stdlib.h>\n#include &lt;string.h>\n#include &lt;unistd.h>\n#include &lt;sys\/types.h>\n#include &lt;sys\/socket.h>\n#include &lt;netinet\/in.h>\n#include &lt;arpa\/inet.h>\n#include &lt;netdb.h>\n\n#define PORT 8888\n#define BUFFER_SIZE 1024\n\nint main(int argc, char *argv[]) {\n    int sock_fd;\n    struct sockaddr_in adresse_serveur;\n    struct hostent *serveur;\n    char buffer[BUFFER_SIZE];\n    char message[BUFFER_SIZE];\n    int bytes_recus;\n    struct in_addr **addr_list;  \/* Pour une version plus explicite *\/\n\n    \/* V\u00e9rification des arguments *\/\n    if (argc &lt; 2) {\n        fprintf(stderr, \"Usage: %s &lt;adresse_serveur>\\n\", argv[0]);\n        exit(EXIT_FAILURE);\n    }\n\n    \/* 1. Cr\u00e9ation du socket *\/\n    sock_fd = socket(AF_INET, SOCK_STREAM, 0);\n    if (sock_fd &lt; 0) {\n        perror(\"Erreur cr\u00e9ation socket\");\n        exit(EXIT_FAILURE);\n    }\n\n    \/* 2. R\u00e9solution du nom d'h\u00f4te *\/\n    serveur = gethostbyname(argv[1]);\n    if (serveur == NULL) {\n        fprintf(stderr, \"H\u00f4te inconnu : %s\\n\", argv[1]);\n        close(sock_fd);\n        exit(EXIT_FAILURE);\n    }\n\n    \/* 3. Configuration de l'adresse *\/\n    memset(&amp;adresse_serveur, 0, sizeof(adresse_serveur));\n    adresse_serveur.sin_family = AF_INET;\n    \n    \/* M\u00e9thode alternative plus explicite *\/\n    addr_list = (struct in_addr **)serveur->h_addr_list;\n    adresse_serveur.sin_addr = *addr_list[0];\n    adresse_serveur.sin_port = htons(PORT);\n\n    \/* 4. Connexion au serveur *\/\n    if (connect(sock_fd, (struct sockaddr *)&amp;adresse_serveur, sizeof(adresse_serveur)) &lt; 0) {\n        perror(\"Erreur connect\");\n        close(sock_fd);\n        exit(EXIT_FAILURE);\n    }\n\n    printf(\"Connect\u00e9 au serveur %s:%d\\n\", argv[1], PORT);\n    printf(\"Adresse IP : %s\\n\", inet_ntoa(adresse_serveur.sin_addr));\n\n    \/* 5. \u00c9change de donn\u00e9es *\/\n    while (1) {\n        printf(\"Message \u00e0 envoyer (ou 'quit' pour quitter) : \");\n        fgets(message, BUFFER_SIZE, stdin);\n        \n        \/* Suppression du saut de ligne *\/\n        message[strcspn(message, \"\\n\")] = '\\0';\n        \n        if (strcmp(message, \"quit\") == 0) {\n            break;\n        }\n        \n        \/* Envoi *\/\n        send(sock_fd, message, strlen(message), 0);\n        \n        \/* R\u00e9ception de la r\u00e9ponse *\/\n        bytes_recus = recv(sock_fd, buffer, BUFFER_SIZE - 1, 0);\n        if (bytes_recus &lt;= 0) {\n            printf(\"Serveur d\u00e9connect\u00e9\\n\");\n            break;\n        }\n        \n        buffer[bytes_recus] = '\\0';\n        printf(\"R\u00e9ponse du serveur : %s\\n\", buffer);\n    }\n\n    \/* 6. Fermeture *\/\n    close(sock_fd);\n    return 0;\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Makefile<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"md\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">CC = gcc\nCFLAGS = -Wall -Wextra -ansi -pedantic\n\nall: serveur\n\nserveur: serveur_tcp.c\n\t$(CC) $(CFLAGS) -o serveur serveur_tcp.c\n\nclean:\n\trm -f serveur\n\n.PHONY: all clean\n<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Client TCP<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;stdio.h>\n#include &lt;stdlib.h>\n#include &lt;string.h>\n#include &lt;unistd.h>\n#include &lt;sys\/types.h>\n#include &lt;sys\/socket.h>\n#include &lt;netinet\/in.h>\n#include &lt;arpa\/inet.h>\n#include &lt;netdb.h>\n\n#define PORT 8888\n#define BUFFER_SIZE 1024\n\nint main(int argc, char *argv[]) {\n    int sock_fd;\n    struct sockaddr_in adresse_serveur;\n    struct hostent *serveur;\n    char buffer[BUFFER_SIZE];\n    char message[BUFFER_SIZE];\n    int bytes_recus;\n    struct in_addr **addr_list;  \/* Pour une version plus explicite *\/\n\n    \/* V\u00e9rification des arguments *\/\n    if (argc &lt; 2) {\n        fprintf(stderr, \"Usage: %s &lt;adresse_serveur>\\n\", argv[0]);\n        exit(EXIT_FAILURE);\n    }\n\n    \/* 1. Cr\u00e9ation du socket *\/\n    sock_fd = socket(AF_INET, SOCK_STREAM, 0);\n    if (sock_fd &lt; 0) {\n        perror(\"Erreur cr\u00e9ation socket\");\n        exit(EXIT_FAILURE);\n    }\n\n    \/* 2. R\u00e9solution du nom d'h\u00f4te *\/\n    serveur = gethostbyname(argv[1]);\n    if (serveur == NULL) {\n        fprintf(stderr, \"H\u00f4te inconnu : %s\\n\", argv[1]);\n        close(sock_fd);\n        exit(EXIT_FAILURE);\n    }\n\n    \/* 3. Configuration de l'adresse *\/\n    memset(&amp;adresse_serveur, 0, sizeof(adresse_serveur));\n    adresse_serveur.sin_family = AF_INET;\n    \n    \/* M\u00e9thode alternative plus explicite *\/\n    addr_list = (struct in_addr **)serveur->h_addr_list;\n    adresse_serveur.sin_addr = *addr_list[0];\n    adresse_serveur.sin_port = htons(PORT);\n\n    \/* 4. Connexion au serveur *\/\n    if (connect(sock_fd, (struct sockaddr *)&amp;adresse_serveur, sizeof(adresse_serveur)) &lt; 0) {\n        perror(\"Erreur connect\");\n        close(sock_fd);\n        exit(EXIT_FAILURE);\n    }\n\n    printf(\"Connect\u00e9 au serveur %s:%d\\n\", argv[1], PORT);\n    printf(\"Adresse IP : %s\\n\", inet_ntoa(adresse_serveur.sin_addr));\n\n    \/* 5. \u00c9change de donn\u00e9es *\/\n    while (1) {\n        printf(\"Message \u00e0 envoyer (ou 'quit' pour quitter) : \");\n        fgets(message, BUFFER_SIZE, stdin);\n        \n        \/* Suppression du saut de ligne *\/\n        message[strcspn(message, \"\\n\")] = '\\0';\n        \n        if (strcmp(message, \"quit\") == 0) {\n            break;\n        }\n        \n        \/* Envoi *\/\n        send(sock_fd, message, strlen(message), 0);\n        \n        \/* R\u00e9ception de la r\u00e9ponse *\/\n        bytes_recus = recv(sock_fd, buffer, BUFFER_SIZE - 1, 0);\n        if (bytes_recus &lt;= 0) {\n            printf(\"Serveur d\u00e9connect\u00e9\\n\");\n            break;\n        }\n        \n        buffer[bytes_recus] = '\\0';\n        printf(\"R\u00e9ponse du serveur : %s\\n\", buffer);\n    }\n\n    \/* 6. Fermeture *\/\n    close(sock_fd);\n    return 0;\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Makefile<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"md\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">CC = gcc\nCFLAGS = -Wall -Wextra -ansi -pedantic\n\nall: client\n\nclient: client_tcp.c\n\t$(CC) $(CFLAGS) -o client client_tcp.c\n\nclean:\n\trm -f client\n\n.PHONY: all clean\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Serveur TCP Makefile Client TCP Makefile<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","_uag_custom_page_level_css":"","footnotes":""},"class_list":["post-7568","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Sockets en C ansi - workboot<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/workboot.fr\/ciela\/sockets-en-c-ansi\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Sockets en C ansi - workboot\" \/>\n<meta property=\"og:description\" content=\"Serveur TCP Makefile Client TCP Makefile\" \/>\n<meta property=\"og:url\" content=\"https:\/\/workboot.fr\/ciela\/sockets-en-c-ansi\/\" \/>\n<meta property=\"og:site_name\" content=\"workboot\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-03T07:27:34+00:00\" \/>\n<meta name=\"twitter:label1\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/sockets-en-c-ansi\\\/\",\"url\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/sockets-en-c-ansi\\\/\",\"name\":\"Sockets en C ansi - workboot\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/#website\"},\"datePublished\":\"2026-04-03T06:49:32+00:00\",\"dateModified\":\"2026-04-03T07:27:34+00:00\",\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/workboot.fr\\\/ciela\\\/sockets-en-c-ansi\\\/\"]}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/#website\",\"url\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/\",\"name\":\"workboot\",\"description\":\"Open Source, Open Minds \",\"publisher\":{\"@id\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/#organization\",\"name\":\"workboot\",\"url\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/wp-content\\\/uploads\\\/2025\\\/05\\\/logo_ciel-dorian-1.png\",\"contentUrl\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/wp-content\\\/uploads\\\/2025\\\/05\\\/logo_ciel-dorian-1.png\",\"width\":1024,\"height\":950,\"caption\":\"workboot\"},\"image\":{\"@id\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Sockets en C ansi - workboot","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/workboot.fr\/ciela\/sockets-en-c-ansi\/","og_locale":"fr_FR","og_type":"article","og_title":"Sockets en C ansi - workboot","og_description":"Serveur TCP Makefile Client TCP Makefile","og_url":"https:\/\/workboot.fr\/ciela\/sockets-en-c-ansi\/","og_site_name":"workboot","article_modified_time":"2026-04-03T07:27:34+00:00","twitter_misc":{"Dur\u00e9e de lecture estim\u00e9e":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/workboot.fr\/ciela\/sockets-en-c-ansi\/","url":"https:\/\/workboot.fr\/ciela\/sockets-en-c-ansi\/","name":"Sockets en C ansi - workboot","isPartOf":{"@id":"https:\/\/workboot.fr\/ciela\/#website"},"datePublished":"2026-04-03T06:49:32+00:00","dateModified":"2026-04-03T07:27:34+00:00","inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/workboot.fr\/ciela\/sockets-en-c-ansi\/"]}]},{"@type":"WebSite","@id":"https:\/\/workboot.fr\/ciela\/#website","url":"https:\/\/workboot.fr\/ciela\/","name":"workboot","description":"Open Source, Open Minds ","publisher":{"@id":"https:\/\/workboot.fr\/ciela\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/workboot.fr\/ciela\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/workboot.fr\/ciela\/#organization","name":"workboot","url":"https:\/\/workboot.fr\/ciela\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/workboot.fr\/ciela\/#\/schema\/logo\/image\/","url":"https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2025\/05\/logo_ciel-dorian-1.png","contentUrl":"https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2025\/05\/logo_ciel-dorian-1.png","width":1024,"height":950,"caption":"workboot"},"image":{"@id":"https:\/\/workboot.fr\/ciela\/#\/schema\/logo\/image\/"}}]}},"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"admin","author_link":"https:\/\/workboot.fr\/ciela\/author\/admin\/"},"uagb_comment_info":0,"uagb_excerpt":"Serveur TCP Makefile Client TCP Makefile","_links":{"self":[{"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/pages\/7568","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/comments?post=7568"}],"version-history":[{"count":6,"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/pages\/7568\/revisions"}],"predecessor-version":[{"id":7577,"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/pages\/7568\/revisions\/7577"}],"wp:attachment":[{"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/media?parent=7568"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}