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

  FORUM HardWare.fr
  Programmation
  Python

  récupération donnée dans des paquet UDP

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

récupération donnée dans des paquet UDP

n°2253361
lysitheas
Linux for human being
Posté le 16-03-2015 à 16:15:37  profilanswer
 

Salut a tous  :hello:  
 
Je bosse sur un projet de réseau de capteurs, ces dernier envoie leur données via le réseau TCP/IP dans des paquet UDP.
 
Savez -vous comment je pourrais récupérer les données de ces paquet UDP via un petit programme ( en quel langage je ne sais pas encore. a déterminer, je suis ouvert a toute proposition =)
l'objectif serai de pouvoir écrire ces donneés dans des fichiers texte brut , pour ensuite y ecrire proprement dans une base mysql
 
Merci de votre aide =)


Message édité par lysitheas le 17-03-2015 à 08:47:28

---------------
Rog G501 | win8.1 | Linux Mint 17.3 | use TLP fom linrunner for battery use on Liunx. | Visit my site : opentrux.fr
mood
Publicité
Posté le 16-03-2015 à 16:15:37  profilanswer
 

n°2253378
tpierron
Posté le 16-03-2015 à 18:13:14  profilanswer
 

Si tu veux juste vérifier que ça fonctionne, tu peux utiliser l'outil netcat (installé en standard sous OS X et linux), avec une commande du genre:

$ nc -l -u -p 12345


Écoutera sur le port UDP 12345. Si c'est du binaire qui est envoyé, tu ne verra probablement rien d'intéressant. Si tu veux faire ça par programme, tu peux te baser sur ce genre de pseudo-code :

Code :
  1. SOCKADDR_IN addr_local;
  2. SOCKADDR_IN addr_dest;
  3. SOCKET      sock;
  4.  
  5. /* We now accept packet on given UDP port, send query */
  6. sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
  7.  
  8. if (sock == -1) return;
  9.  
  10. memset(&addr_local, 0, sizeof addr_local);
  11. addr_local.sin_port   = htons(port);
  12. addr_local.sin_family = AF_INET;
  13.  
  14. if (bind(sock, (PSOCKADDR) &addr_local, sizeof addr_local) == 0)
  15. {
  16.     TEXT packet[512];
  17.     int  len, slen = sizeof addr_dest;
  18.  
  19.     while ((len = recvfrom(sock, packet, sizeof packet, 0, (SOCKADDR *) &addr_dest, &slen)))
  20.     {
  21.         /* Tu viens de recevoir un packet de <len> octet dans <packet> */
  22.     }
  23.     closesocket(sock);
  24. }


Note: ça utilise l'API winsock et non BSD. À toi de faire la conversion.

n°2253396
xilebo
noone
Posté le 16-03-2015 à 20:48:12  profilanswer
 

A noter qu'un datagramme UDP ne peut être reçu que par un seul appel recvfrom à la fois. Si la taille précisée dans recvfrom est inférieure à la taille du datagramme réellement reçu, le reste sera perdu. Ceci peut être problématique dans le cas de la réception de datagrammes grands et de tailles variables ( ce qu'il ne faudrait pas faire dans l'absolu ).

n°2253420
lysitheas
Linux for human being
Posté le 17-03-2015 à 08:50:46  profilanswer
 

Merci pour vos réponse, je voit que ca à l'air possible  :lol:  
 
Quand tu parle de pseudo code, on est en C (c'est ca ^^)
 
y'aurai pas moyen de faire ca en python ?


---------------
Rog G501 | win8.1 | Linux Mint 17.3 | use TLP fom linrunner for battery use on Liunx. | Visit my site : opentrux.fr
n°2253434
gilou
Modérateur
Modzilla
Posté le 17-03-2015 à 11:55:17  profilanswer
 

C'est le b a ba de la programmation réseau, ça, tu prends n'importe quel bouquin de programmation réseau dans le langage de ton choix et tu auras des exemples de code.
Si tu veux en python, tu cherches dans un bouquin python/réseau.
Suffit de taper "python udp client" dans la recherche google pour avoir un tas d'exemples.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2253756
lysitheas
Linux for human being
Posté le 20-03-2015 à 11:42:11  profilanswer
 

Hey salut tout le monde !  :hello:  
Après quelque recherche, voici ce que j'ai trouvé:
Code server.py

Code :
  1. root@oxygen:~/capteur/serv_cli_udp# cat receiv.py
  2. #!/usr/bin/env python
  3. # -*- coding: utf-8 -*-
  4. import sys
  5. import MySQLdb
  6. import socket
  7. import time
  8. UDP_IP = "127.0.0.1"
  9. UDP_PORT = 5005
  10. sock = socket.socket(socket.AF_INET, # ca c'est pour internet
  11.                         socket.SOCK_DGRAM) # et ca pour UDP
  12. sock.bind((UDP_IP, UDP_PORT))
  13. while True:  # boucle infinie pour recupérer les data
  14.         data, addr = sock.recvfrom(1024) # on dit que le buffer faire 1024 bytes
  15.         print "received data : ",data


 
et client:

Code :
  1. root@oxygen:~/capteur/serv_cli_udp# cat sending.py
  2. #!/usr/bin/env python
  3. # -*- coding: utf-8 -*-
  4. import sys
  5. import MySQLdb
  6. import socket
  7. import time
  8. print "This is ths send UDP paquet program"
  9. UDP_IP = "127.0.0.1"
  10. UDP_PORT = 5005
  11. MESSAGE = raw_input("Tapez votre message : " )
  12. print "Envoie de '", MESSAGE, "'"
  13. print "UDP Target ip : ", UDP_IP
  14. print "UDP Targer port : ",UDP_PORT
  15. print "message :", MESSAGE
  16. sock = socket.socket(socket.AF_INET, # ca c'est internet
  17.                         socket.SOCK_DGRAM) # mode datagram pour UDP
  18. sock.sendto(MESSAGE, (UDP_IP, UDP_PORT))


 
 
Ma question est maintenant que j'arrive a transmettre des données via des paquet UDP.
j'aimerai pouvoir lire les en-tete UDP. le but serai de recupérer:
port source | Port  destinaion | longueur | checkSUM
 
Merci =)


Message édité par lysitheas le 20-03-2015 à 11:43:03

---------------
Rog G501 | win8.1 | Linux Mint 17.3 | use TLP fom linrunner for battery use on Liunx. | Visit my site : opentrux.fr

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

  récupération donnée dans des paquet UDP

 

Sujets relatifs
Récupération paramètres d'une ancienne URL pour une nouvelle[html et JavaScript] Récupération d'informations et ré-utilisation
Formalisation donnéeRecupération de chk dynamique
Vba: problème de récupération des octetsAide:extraire un groupe de données depuis un groupe de fichiers
[Python] Checkbox et condition - Récupération de variableRécupération de données passées via Javascript
UDP entre 2 clients sans serveur ? [Outlook VBA] Récupération pièces jointes
Plus de sujets relatifs à : récupération donnée dans des paquet UDP


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