Bonjour,

Dans le cadre d'un projet d'études, J'aimerais essayer de récupérer des données provenant d'une source qui envoie des données par protocole UDP avec une adresse et un port. Ainsi, j'ai repris un programme en c++ afin de récupérer les données via le port 3000 mais je ne récupère aucune donnée puisque le programme reste bloqué dans la fonction rcvfrom().

Ainsi, j'ai regardé si la source envoyé des données via le resource monitor. Ainsi, elle envoie bien des données (send 400B/s). Je n'ai également pas d'erreur à la connexion au port correspondant.

Voici le code c++ ci-dessous :
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <winsock2.h> // pour les fonctions socket
#include <cstdio> // Pour les Sprintf
 
#pragma comment(lib,"ws2_32.lib")
 
 
WSADATA initialisation_win32; 
int erreur;
int tempo; 
int nombre_de_caractere; 
char buffer[65535]; 
SOCKET id_de_la_socket; 
SOCKADDR_IN information_sur_la_source; 
 
int main (int argc, char* argv[])
	{
	printf("\nEcoute du port 3000\n");
 
	erreur=WSAStartup(MAKEWORD(2,2),&initialisation_win32);
	if (erreur!=0)
		printf("\nDesole, je ne peux pas initialiser Winsock du a l'erreur : %d %d",erreur,WSAGetLastError());
	else
		printf("\nWSAStartup  : OK");
 
	id_de_la_socket=socket(AF_INET,SOCK_DGRAM,0);
	if (id_de_la_socket==INVALID_SOCKET)
		printf("\nDesole, je ne peux pas creer la socket du a l'erreur : %d",WSAGetLastError());
	else
		printf("\nsocket      : OK");
 
	information_sur_la_source.sin_family=AF_INET; 
	information_sur_la_source.sin_addr.s_addr=INADDR_ANY;
	information_sur_la_source.sin_port=htons(3000); // Ecoute sur le port 3000
	erreur=bind(id_de_la_socket,(struct sockaddr*)&information_sur_la_source,sizeof(information_sur_la_source));
	if (erreur!=0)
		printf("\nDesole, je ne peux pas ecouter ce port, code d'erreur : %d %d",erreur,WSAGetLastError());
	else
		printf("\nbind        : OK");
 
	tempo=sizeof(information_sur_la_source); 
	printf("\nbefore recvfrom");
	nombre_de_caractere=recvfrom(id_de_la_socket,buffer,1024,0,(struct sockaddr*)&information_sur_la_source,&tempo);
	printf("\nafter recvfrom");
	buffer[nombre_de_caractere]=0; 
	printf("\nVoici les donnees : %s",buffer);
 
	erreur=closesocket(id_de_la_socket);
	if (erreur!=0)
		printf("\nDesole, je ne peux pas liberer la socket du a l'erreur : %d %d",erreur,WSAGetLastError());
	else
		printf("\nclosesocket : OK");
 
	erreur=WSACleanup(); 
	if (erreur!=0)
		printf("\nDesole, je ne peux pas liberer winsock du a l'erreur : %d %d",erreur,WSAGetLastError());
	else
		printf("\nWSACleanup  : OK");
	}
Merci d'avance.