Envoyer message en UDP... Comment faire?

  • Auteur de la discussion Auteur de la discussion OJAL
  • Date de début Date de début
WRInaute impliqué
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 :)
 
WRInaute impliqué
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 dit:
Sinon, pour une solution client, pourquoi utiliser une page web et pas une application?
 
WRInaute passionné
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)
 
WRInaute impliqué
Bonjour,

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

Voici le script PHP que j'utilise :
Code:
<?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????
 
WRInaute accro
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.
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut