Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1122 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C++] Socket UDP - Pb Reception du datagramme

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] Socket UDP - Pb Reception du datagramme

n°414102
k-id
Posté le 03-06-2003 à 11:16:09  profilanswer
 

hello !
 
Voilà j'ai un p'tit soucis avec mon prog. Je dois receptionner des datagrammes UDP sur le port 162 (c'est des Traps SNMP) et j'utilise pour ça le p'tit Packet Recever ci dessous. Mais le pb, c'est que je ne reçoit que quelques octets et pas le datagramme complet. Comme on fait pour capturer la totalité de la trame qui arrive ??? :??:  
 
Help me ?
 
Si vous connaissez d'autres moyens pour receptionner les traps SNMP en Visual C++, je suis preneur car je crois que je vais galerer avec cette solution :cry: . J'ai vu qu'il existait un truc qui s'appelle MSDN WinSNMP mais j'ai pas le moindre de bout de code ou tuto pour etudier çà  :(  
 

Code :
  1. #include<stdio.h>
  2. #include<winsock2.h>
  3. #pragma comment(lib,"ws2_32.lib" )
  4. void main()
  5. {
  6. WSADATA wsa;
  7. WSAStartup(MAKEWORD(2,0),&wsa);
  8. SOCKET sock;
  9. SOCKADDR_IN sin;
  10. printf("UDP Packet Recever\n\n" );
  11. int port,i;
  12. printf("Port : " );
  13. scanf("%i",&port);
  14. sin.sin_family=AF_INET;
  15. sin.sin_addr.s_addr=INADDR_ANY;
  16. sin.sin_port=htons(port);
  17. sock=socket(AF_INET,SOCK_DGRAM,0);
  18. bind(sock,(SOCKADDR*)&sin,sizeof(sin));
  19. unsigned char buffer[1500];
  20. int sinsize=sizeof(sin);
  21. int size;
  22. while(1)
  23. {
  24.  memset(buffer,0,sizeof(buffer));
  25.     size=recvfrom(sock,(char *) buffer,sizeof(buffer),0,(SOCKADDR*)&sin,&sinsize);
  26.  printf("Size : %i\n",size);
  27.  for (i=0;i<size;i++)
  28.   {
  29.    printf("%x ",buffer[i]);
  30.   }
  31.  printf("\n" );
  32. }
  33. }


Message édité par k-id le 03-06-2003 à 14:46:41
mood
Publicité
Posté le 03-06-2003 à 11:16:09  profilanswer
 

n°414104
LetoII
Le dormeur doit se réveiller
Posté le 03-06-2003 à 11:18:16  profilanswer
 

Laisse moi deviner ça t'affiche que les 4 derniers octets non?
 
(edit je voulais dire premiers, mais bon c même pas ça en plus :D)


Message édité par LetoII le 03-06-2003 à 11:25:48

---------------
Le Tyran
n°414105
k-id
Posté le 03-06-2003 à 11:20:15  profilanswer
 

LetoII a écrit :

Laisse moi deviner ça t'affiche que les 4 derniers octets non?


 
Voui j'ai que 4 octets dans mon buffer ! ça vient de quoi  :??:

n°414110
LetoII
Le dormeur doit se réveiller
Posté le 03-06-2003 à 11:24:29  profilanswer
 

Si mes souvenirs sur printf sont bons, ton printf("%X",buffer) interpréte l'adresse de ton buffer comme un entier et te l'affiche en exa. Si tu veux afficher to buffer je te conseil de récupérer la taille renvoyée par recvfrom et d'afficher ton buffer par groupe de 4 octets ou un truc du genre


---------------
Le Tyran
n°414116
k-id
Posté le 03-06-2003 à 11:27:40  profilanswer
 

LetoII a écrit :

Si mes souvenirs sur printf sont bons, ton printf("%X",buffer) interpréte l'adresse de ton buffer comme un entier et te l'affiche en exa. Si tu veux afficher to buffer je te conseil de récupérer la taille renvoyée par recvfrom et d'afficher ton buffer par groupe de 4 octets ou un truc du genre


 
oki j'essaye ça  :)  
 
Merci

n°414360
k-id
Posté le 03-06-2003 à 14:11:43  profilanswer
 

bon ya du mieux, j'arrive à afficher la totalité de mes données reçues en fesant une p'tit boucle qui va bien  
 
Mais par contre j'ai quelques couilles dedans genre au lien d'avoir la valeur hexa par ex 'A0' et ben j'ai 'FFFFFFA0' mais ça le fait pas tout le temps  :pt1cable:  
 
J'arrive pas à résoudre ce pb... une idée  :??:  
@+

n°414398
LetoII
Le dormeur doit se réveiller
Posté le 03-06-2003 à 14:24:01  profilanswer
 

fait voir ton code d'affichage


---------------
Le Tyran
n°414411
k-id
Posté le 03-06-2003 à 14:29:43  profilanswer
 

LetoII a écrit :

fait voir ton code d'affichage


 
J'ai modifié le code du premier post.

n°414412
LetoII
Le dormeur doit se réveiller
Posté le 03-06-2003 à 14:30:38  profilanswer
 

k-id a écrit :


 
J'ai modifié le code du premier post.


 
Oups  :whistle:


---------------
Le Tyran
n°414415
LetoII
Le dormeur doit se réveiller
Posté le 03-06-2003 à 14:33:00  profilanswer
 

Alors déjà tu passe buffer en unsigned char et au lieu de faire un printf de buffer[i] tante un unsigned int temp = buffer[i]; et tu affiche temp.


---------------
Le Tyran
mood
Publicité
Posté le 03-06-2003 à 14:33:00  profilanswer
 

n°414426
k-id
Posté le 03-06-2003 à 14:42:15  profilanswer
 

LetoII a écrit :

Alors déjà tu passe buffer en unsigned char et au lieu de faire un printf de buffer[i] tante un unsigned int temp = buffer[i]; et tu affiche temp.


 
Veux pas passer en unsigned char cr recvfrom demande un char  :cry:  
 
error C2664: 'recvfrom' : cannot convert parameter 2 from 'unsigned char [1500]' to 'char *'  :??:

n°414436
k-id
Posté le 03-06-2003 à 14:45:21  profilanswer
 

k-id a écrit :


 
Veux pas passer en unsigned char cr recvfrom demande un char  :cry:  
 
error C2664: 'recvfrom' : cannot convert parameter 2 from 'unsigned char [1500]' to 'char *'  :??:  


 
ah c bon en fait il fallait mettre :
size=recvfrom(sock,(char *) buffer,sizeof(buffer),0,(SOCKADDR*)&sin,&sinsize);
 
ça marche !! merci bcp
 
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++] Socket UDP - Pb Reception du datagramme

 

Sujets relatifs
[socket] en lecture ou écriture seule[socket TCP] gestion de la deconnexion d1 client telnet
[PHP] Accusé de réception à un mailSocket et communication client/serveur
[C++/Builder] ch. méthode socket, comme linux : bytesAvailable() !URG![Linux C] socket serveur toujours présente quand on relance le prog
[Socket] plusieurs requetes dans une meme socket ?![JAVA] Socket UDP et InputStream, probleme de read
[C/C++] Sockets en UDP, problème d'envoi à une IP 
Plus de sujets relatifs à : [C++] Socket UDP - Pb Reception du datagramme


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR