Bonjour,
Je programme actuellement une bibliothèque permettant l'utilisation des protocoles TCP et UDP à l'aide de Winsock.
Cette bibliothèque permet de gérer un client simple mais aussi de gérer un serveur multi-clients.
Avec le protocole UDP, le serveur, pour simuler une connexion distante avec les clients, va conserver les informations reçues grâce à la fonction recvfrom() et la structure sockaddr_in.
Ces informations vont permettre au serveur de pouvoir envoyer une donnée/d'en recevoir d'un client spécifique et aussi permettre de vérifier qu'un client ne se connecte pas deux fois au serveur.
Pour recevoir des données en provenance du bon client, j'utilise ce code:
Dans ce code, m_sock correspond à la socket du serveur et m_client[id] correspond au client ciblé.
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 sockaddr_in buffer_sockaddr; TIMECAPS caps; ZeroMemory(&caps,sizeof(caps)); timeGetDevCaps(&caps,sizeof(caps)); int size_sin = sizeof(sockaddr_in); do { ZeroMemory(&buffer_sockaddr,sizeof(buffer_sockaddr)); Sleep(caps.wPeriodMin); //Récupération du sockaddr_in du client sans modifier la pile de réception recvfrom(m_sock,NULL,0,MSG_PEEK,(SOCKADDR*)&buffer_sockaddr,&size_sin); } while ( /* test de la bonne IP du client ainsi que du bon port de connexion */) //Si on arrive ici, c'est que le message provient du bon client donc on le récupère recvfrom(m_sock,buffer_data,size_data,0,(SOCKADDR*)&m_client[id].sin,&size_sin);
Malheureusement, ce code ne permet que de récupérer le premier message de la pile donc si le message du client ciblé se situe après le premier message, il ne sera jamais récupéré.
Ma question est donc: Comment peut-on parcourir la pile de réception afin de récupérer le message situé telle ou telle position ?
Merci d'avance pour vos réponses.
Partager