Salut,
J'ai creer des classes C++ pour me simplifier l'utilisation des sockets : SOCKET_CLIENT et SOCKET_SERVER derivent de SOCKET_INIT. SOCKET_INIT contient notamment les fonctions d'envoi et de reception. Le code est prevu pour fonctionner en TCP et en UDP selon ce que l'utilisateur declare au constructeur.
Voici le code qui pose probleme :Cette fonction est commune au client et au serveur. Elle fonctionne parfaitement lors de son appel depuis le client(UDP), le serveur(UDP) et le serveur(TCP). Mais lors de l'appel depuis le client(TCP), elle n'attend pas l'arrivee du message et renvoie directement l'erreur "impossible de lire le message entrant" (bref, elle renvoie -1).
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 bool SOCKET_INIT::recep() { int num_byte; char buffer[MAXDATASIZE+1]; /**** réception du message ****/ if(get_type() == TCP){ //reception TCP num_byte = recv(desc_new, buffer, sizeof(buffer)-1, 0); }else{ //reception UDP socklen_t sin_size = sizeof(struct sockaddr_in); num_byte = recvfrom(desc_sock, buffer, sizeof(buffer)-1, 0, (struct sockaddr *) &dest_addr, &sin_size); } if(num_byte != 0){ if(num_byte != SOCKET_ERROR){ /**** traitement du message ****/ buffer[num_byte] = 0; //ajout du caractère de fin de chaîne string addr = inet_ntoa(dest_addr.sin_addr); print_recep(addr, buffer); return true; }else{ print_error("impossible de lire le message entrant"); return false; } }else{ print_info("client " + tostr(desc_new) + " déconnecté"); return false; } }
Y-a-il une precaution particuliere a prendre lors qu'on veut recevoir des donnees avec le client en mode connecte ?
Merci
Partager