Création Serveur/Client

Création Serveur/Client - C - Programmation

Marsh Posté le 27-04-2020 à 15:51:51    

Bonjour!
J'aimerais créer un serveur et client pour apprendre un peu l'utilisation des sockets.  
J'ai écris un bout de code mais lorsque je compile je n'ai ni "listen" ni "bind" qui s'affiche.
Pourriez vous m'aider?
 
Merci!
 
Code serveur:

Code :
  1. #include<unistd.h>
  2. #include <winsock2.h>
  3. #include <ws2tcpip.h>
  4. #include<stdio.h>
  5. #include<stdlib.h>
  6. #include<string.h>
  7. typedef struct User
  8. {
  9.     char nom[30];
  10.     int age;
  11. }User;
  12. int main(void)
  13. {
  14.     WSADATA WSAData;
  15.     if(WSAStartup(MAKEWORD(1, 1), &WSAData))
  16.     {
  17.        printf("WSA n'a pas pu être initialisé.\n" );
  18.     }
  19.     int socketServer = socket(AF_INET, SOCK_STREAM, 0);
  20.     struct sockaddr_in addrServer;
  21.     addrServer.sin_addr.s_addr = inet_addr("127.0.0.1" );
  22.     addrServer.sin_family = AF_INET;
  23.     addrServer.sin_port = htons(30000);
  24.     bind(socketServer, (const struct sockaddr *)&addrServer, sizeof(addrServer));
  25.     printf("bind: %s\n",socketServer);
  26.     listen(socketServer,5);
  27.     printf("listen\n" );
  28.     struct sockaddr_in addrClient;
  29.     socklen_t csize = sizeof(addrClient);
  30.     int socketClient = accept(socketServer, (struct sockaddr *)&addrClient, &csize);
  31.     printf("accept\n" );
  32.     printf("client: %d\n", socketClient);
  33.     User user = {
  34.         .nom = "Arthur",
  35.         .age = 19
  36.     };
  37.     close(socketClient);
  38.     close(socketServer);
  39.     printf("Close\n" );
  40.     WSACleanup();
  41.     return 0;
  42. }

Reply

Marsh Posté le 27-04-2020 à 15:51:51   

Reply

Marsh Posté le 29-04-2020 à 08:29:49    

C'est pas quand tu compiles mais quand tu exécutes, c'est normal que tu ne vois rien quand tu compiles :o
 
La ligne 29 , c'est %d et pas %s pour afficher la valeur de socket.
 
ligne 32, tu devrais voir s'afficher listen.
 
ligne 36 : c est un appel bloquant, il débloquera à la première connexion.
 
Sous windows, les printf s'affichent uniquement dans une console, tu ne les verras pas dans un debugger type visual.

Reply

Marsh Posté le 29-04-2020 à 17:15:28    

Merci pour ta réponse. J'ai carrément oublié de préciser que j'étais sur windows et que je code avec CodeBlocks.
Du coup yes j'ai corrigé le %d et j'ai également rajouté un memset(&addrServer, 0, sizeof (addrServer)); entre la ligne 23 et 24
et également :
setbuf(stdout, NULL);
setbuf(stderr, NULL);
 
Au début du main et ça fonctionne parfaitement maintenant.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed