Bonjour,
Je fais des tests avant de commencer un projet réseau.
J'ai un problème de communication entre mon serveur et mon client en mode TCP.
Mon client envoie un message avec send et mon serveur est censé le récupérer avec recv.
Voila le code coté serveur:
Et coté client:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 /* Ici création socket, bind, listen */ // On écoute un client csock = accept(sock, (SOCKADDR *)&csin, &sinsize); if(csock == INVALID_SOCKET) { perror("accept()"); exit(errno); }printf("Accepter...\n"); // Reception d'une donnée printf("Attente d'un message client...\n"); if((n = recv(sock, buffer, sizeof buffer - 1, 0)) < 0) { perror("recv()"); exit(errno); } buffer[n] = '\0'; printf("Message recu: %s\n", buffer);
La trace du programme donne coté serveur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 SOCKET sock; struct hostent *hostinfo = NULL; SOCKADDR_IN sin = { 0 }; const char *hostname = "192.168.0.5"; char buffer[TAILLE_TAMPON] = "Ceci est un test de message."; // Création de la socket sock = socket(AF_INET, SOCK_STREAM, 0); if(sock == INVALID_SOCKET) { perror("socket()"); exit(errno); } // On récupère les informations de l'hôte auquel on veut se connecter hostinfo = gethostbyname(hostname); if (hostinfo == NULL) { // L'hôte n'existe pas fprintf (stderr, "Unknown host %s.\n", hostname); exit(EXIT_FAILURE); } // On remplis la structure pour se connecter sin.sin_addr = *(IN_ADDR *) hostinfo->h_addr; /* l'adresse se trouve dans le champ h_addr de la structure hostinfo */ sin.sin_port = htons(PORT); /* on utilise htons pour le port */ sin.sin_family = AF_INET; if(connect(sock,(SOCKADDR *) &sin, sizeof(SOCKADDR)) == SOCKET_ERROR) { perror("connect()"); exit(errno); } // Envoie d'une donnée if(send(sock, buffer, strlen(buffer), 0) < 0) { perror("send()"); exit(errno); } printf("Message envoyer: %s\n", buffer);
Et coté client:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 En ecoute... Essai d'acceptation... Accepter... Attente d'un message client... recv(): No error Process returned 0 (0x0) execution time : 24.203 s Press any key to continue.
Après test je voie que le retour du recv est -1 (n=-1).
Code : Sélectionner tout - Visualiser dans une fenêtre à part Message envoyer: Ceci est un test de message
Comment résoudre/diagnostiquer le problème ?
Merci.
Partager