{"id":7711,"date":"2026-04-14T15:57:20","date_gmt":"2026-04-14T14:57:20","guid":{"rendered":"https:\/\/workboot.fr\/ciela\/?page_id=7711"},"modified":"2026-04-14T15:58:51","modified_gmt":"2026-04-14T14:58:51","slug":"socket-udp-en-c-ansi","status":"publish","type":"page","link":"https:\/\/workboot.fr\/ciela\/socket-udp-en-c-ansi\/","title":{"rendered":"Socket UDP en C ansi"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">client_udp.c<\/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;sys\/types.h>\n#include &lt;sys\/socket.h>\n#include &lt;netinet\/in.h>\n#include &lt;arpa\/inet.h>\n#include &lt;unistd.h>\n\n#define PORT 8888\n#define BUFFER_SIZE 1024\n\nint main(int argc, char *argv[]) {\n    int sockfd;\n    struct sockaddr_in server_addr;\n    char message[BUFFER_SIZE];\n    int bytes_sent;\n    \n    \/* V\u00e9rifier les arguments *\/\n    if (argc != 2) {\n        fprintf(stderr, \"Usage: %s &lt;server_ip>\\n\", argv[0]);\n        fprintf(stderr, \"Exemple: %s 127.0.0.1\\n\", argv[0]);\n        exit(EXIT_FAILURE);\n    }\n    \n    \/* Cr\u00e9er le socket UDP *\/\n    sockfd = socket(AF_INET, SOCK_DGRAM, 0);\n    if (sockfd &lt; 0) {\n        perror(\"Erreur de cr\u00e9ation du socket\");\n        exit(EXIT_FAILURE);\n    }\n    \n    \/* Configurer l'adresse du serveur *\/\n    memset(&amp;server_addr, 0, sizeof(server_addr));\n    server_addr.sin_family = AF_INET;\n    server_addr.sin_port = htons(PORT);\n    server_addr.sin_addr.s_addr = inet_addr(argv[1]);\n    \n    printf(\"Client UDP - Envoi sans accus\u00e9 de r\u00e9ception\\n\");\n    printf(\"Tapez vos messages (ou 'quit' pour quitter)\\n\\n\");\n    \n    while (1) {\n        \/* Saisir le message *\/\n        printf(\"Message: \");\n        fgets(message, BUFFER_SIZE, stdin);\n        message[strcspn(message, \"\\n\")] = 0;  \/* Supprimer le saut de ligne *\/\n        \n        \/* V\u00e9rifier si l'utilisateur veut quitter *\/\n        if (strcmp(message, \"quit\") == 0) {\n            printf(\"Au revoir!\\n\");\n            break;\n        }\n        \n        \/* Envoyer le message (sans attendre de r\u00e9ponse) *\/\n        bytes_sent = sendto(sockfd, message, strlen(message), 0,\n                           (struct sockaddr *)&amp;server_addr, sizeof(server_addr));\n        \n        if (bytes_sent &lt; 0) {\n            perror(\"Erreur d'envoi\");\n        } else {\n            printf(\"Message envoy\u00e9 (%d octets)\\n\", bytes_sent);\n        }\n        \n        \/* Pas de recvfrom() - pas d'accus\u00e9 de r\u00e9ception *\/\n    }\n    \n    close(sockfd);\n    return 0;\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">serveur_udp.c<\/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;sys\/types.h>\n#include &lt;sys\/socket.h>\n#include &lt;netinet\/in.h>\n#include &lt;arpa\/inet.h>\n#include &lt;unistd.h>\n\n#define PORT 8888\n#define BUFFER_SIZE 1024\n\nint main() {\n    int sockfd;\n    struct sockaddr_in server_addr, client_addr;\n    char buffer[BUFFER_SIZE];\n    socklen_t addr_len = sizeof(client_addr);\n    int bytes_received;\n    \n    \/* Cr\u00e9er le socket UDP *\/\n    sockfd = socket(AF_INET, SOCK_DGRAM, 0);\n    if (sockfd &lt; 0) {\n        perror(\"Erreur de cr\u00e9ation du socket\");\n        exit(EXIT_FAILURE);\n    }\n    \n    \/* Configurer l'adresse du serveur *\/\n    memset(&amp;server_addr, 0, sizeof(server_addr));\n    server_addr.sin_family = AF_INET;\n    server_addr.sin_port = htons(PORT);\n    server_addr.sin_addr.s_addr = INADDR_ANY;\n    \n    \/* Attacher le socket au port *\/\n    if (bind(sockfd, (struct sockaddr *)&amp;server_addr, sizeof(server_addr)) &lt; 0) {\n        perror(\"Erreur de bind\");\n        close(sockfd);\n        exit(EXIT_FAILURE);\n    }\n    \n    printf(\"Serveur UDP en \u00e9coute sur le port %d...\\n\", PORT);\n    printf(\"En attente de messages (Ctrl+C pour quitter)\\n\\n\");\n    \n    while (1) {\n        \/* Recevoir un message (sans envoyer de confirmation) *\/\n        bytes_received = recvfrom(sockfd, buffer, BUFFER_SIZE - 1, 0,\n                                 (struct sockaddr *)&amp;client_addr, &amp;addr_len);\n        \n        if (bytes_received &lt; 0) {\n            perror(\"Erreur de r\u00e9ception\");\n            continue;\n        }\n        \n        buffer[bytes_received] = '\\0';\n        printf(\"[%s:%d] %s\\n\",\n               inet_ntoa(client_addr.sin_addr),\n               ntohs(client_addr.sin_port),\n               buffer);\n    }\n    \n    close(sockfd);\n    return 0;\n}<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>client_udp.c serveur_udp.c<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_uag_custom_page_level_css":"","footnotes":""},"class_list":["post-7711","page","type-page","status-publish","hentry"],"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":"client_udp.c serveur_udp.c","_links":{"self":[{"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/pages\/7711","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=7711"}],"version-history":[{"count":3,"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/pages\/7711\/revisions"}],"predecessor-version":[{"id":7716,"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/pages\/7711\/revisions\/7716"}],"wp:attachment":[{"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/media?parent=7711"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}