Envoyer message en UDP... Comment faire?


OJAL
WRInaute passionné
WRInaute passionné
 
Messages: 1178
Inscription: 10 Avr 2003

Envoyer message en UDP... Comment faire?

Message le Dim Juin 05, 2011 22:51

Bonjour,

Je souhaite piloter des composant électroniques par l'intermédiaire de composants manipulables depuis une simple page web.
Le coeur du système sera piloté par un micro-contrôleur, en l’occurrence un ARDUINO, mais ceci n'est pas le débat ici :wink:
Il faut 'juste' retenir que le micro-contrôleur est capable de recevoir des messages UDP.

En sophistiquant un peu la page web, l'utilisation de javascript permettra certainement d'aller beaucoup plus loin...
Pour valider la chaîne de pilotage je voudrais qu'un slider dans le genre de celui-ci http://docs.jquery.com/UI/Slider me permette de renvoyer vers mon micro-contrôleur des valeurs qui seront ensuite traîtées...

Mais voila, l'UDP me cause un peu comme moyen de transport des informations, mais rien de très concrêt...

Aussi, avez-vous une idée de comment je peux envoyer des info en UDP à mon micro-contrôleur?

Je vous remercie par avance pour votre aide :)


MikeR
WRInaute impliqué
WRInaute impliqué
 
Messages: 586
Inscription: 9 Jan 2010

Re: Envoyer message en UDP... Comment faire?

Message le Dim Juin 05, 2011 23:09

Pour une solution serveur, tu peux utiliser php et créer un socket que tu utilises pour envoyer le message UDP.
Voir http://php.net/manual/en/function.socket-create.php

Sinon, pour une solution client, pourquoi utiliser une page web et pas une application?


OJAL
WRInaute passionné
WRInaute passionné
 
Messages: 1178
Inscription: 10 Avr 2003

Re: Envoyer message en UDP... Comment faire?

Message le Lun Juin 06, 2011 0:04

Merci, c'est ce que je cherchais :D
Je vais tenter d'envoyer un message UDP dès demain :)

Sinon que veux tu dire par:
MikeR a écrit:Sinon, pour une solution client, pourquoi utiliser une page web et pas une application?


MikeR
WRInaute impliqué
WRInaute impliqué
 
Messages: 586
Inscription: 9 Jan 2010

Re: Envoyer message en UDP... Comment faire?

Message le Lun Juin 06, 2011 14:08

Avec la solution serveur, tu as :
PC Client (page web)======internet=====Serveur(php)=====(réseau) UDP====micro-controleur

Tu pourrais faire aussi :
PC Client (application)================================(réseau) UDP====micro-controleur

au lieu d'application, cela pourrait aussi être un plugin chargé sur la page web (comme font les playeurs multimedia)


OJAL
WRInaute passionné
WRInaute passionné
 
Messages: 1178
Inscription: 10 Avr 2003

Re: Envoyer message en UDP... Comment faire?

Message le Lun Juin 06, 2011 14:38

Bonjour,

J'avance, cependant je rencontre certains problèmes :(

Voici le script PHP que j'utilise :
Code: Tout sélectionner
<?PHP
        function ping($host, $timeout = 1) {
                /* ICMP ping packet with a pre-calculated checksum */
                $package = "\x08\x00\x7d\x4b\x00\x00\x00\x00Hello World";
            //$package = "Ceci est le message envoyé par UDP";

            //$socket  = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); // SOCK_DGRAM    Supports datagrams (connectionless, unreliable messages of a fixed maximum length). The UDP protocol is based on this socket type.
            // Le dernier paramètre de socket_create devrait être SOL_UDP
            $socket  = socket_create(AF_INET, SOCK_RAW, 1);   //
            
            
                //socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => $timeout, 'usec' => 0));
                socket_connect($socket, $host, null);

                $ts = microtime(true);
                socket_send($socket, $package, strLen($package), 0);
                if (socket_read($socket, 255))
                        $result = microtime(true) - $ts;
                else    $result = false;
                socket_close($socket);

                return $result;
        }

$adresse_a_pinguer = "192.168.0.19";
$res = ping ($adresse_a_pinguer);
echo $res;
      
?>


Ceci m'indique bien qu'en face à l'adresse 192.168.0.19 j'ai quelque chose qui répond...

MAIS

Où puis-je indiquer le port sur lequel je veux adresser le message? La machine en face est programmée pour recevoir sur le port 8888

Je ne comprends pas les paramètres de SOCKET_CREATE
$socket = socket_create(AF_INET, SOCK_RAW, 1);

En suivant la doc je devrais plutôt avoir:
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
Et cela génère un message d'erreur...

Je suis donc un peu perdu et ces test se font en aveugle...

J'imagine qu'il faudrait WIRESHARK pour lire ce qui se passe sur le réseau????

jcaron
WRInaute accro
WRInaute accro
 
Messages: 2685
Inscription: 13 Fév 2004

Re: Envoyer message en UDP... Comment faire?

Message le Lun Juin 06, 2011 15:45

Regarde un peu les exemples dans les notes sur la doc de socket_create, tu devrais trouver ton bonheur. L'exemple que tu as pris est en ICMP (ping utilise un paquet ICMP echo request, qui demande un paquet ICMP echo reply en retour) et donc ouvre un socket "raw" (IP, quoi) sur lequel il balance des paquets ICMP. Il y a un exemple en UDP juste après.

Tu peux préciser le port soit en utilisant socket_connect (3e paramètre) une fois (et ensuite socket_send), soit en utilisant socket_sendto (plutôt que socket_send) qui te permet de préciser la destination à chaque fois (adresse et port en 5e et 6e paramètres). Dans ton cas, la première solution est probablement la plus simple.

Tu dis que tu as une erreur quand tu essaies de créer un socket UDP, mais tu ne nous dis pas quelle est l'erreur en question...

Jacques.


OJAL
WRInaute passionné
WRInaute passionné
 
Messages: 1178
Inscription: 10 Avr 2003

Re: Envoyer message en UDP... Comment faire?

Message le Lun Juin 06, 2011 16:49

Merci, ça marche en effet :D


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité