Bonjour à tous et à toutes !
Je reviens vers vous après quelques jours de recherches car je suis totalement bloqué pour mon projet.
Je suis actuellement en train de créer deux programmes permettant de communiquer avec des objets connectés. L’un reçoit les données (et fonctionne) , l’autre doit envoyer des données (et…semi-fonctionne o_O).
Je vais essayer de vous expliquer les tests que j’ai pu faire.
Lorsque je combine les deux programmes, tout fonctionne. Par exemple, il recevait des données et tout de suite après, avec les informations du paquet reçu (IP et port), je pouvais envoyer une commande à mon objet. Mais ce n’est pas ce que je veux. Je dois avoir la possibilité d’envoyer une commande n’importe quand.
Mais lorsque je sépare les deux programmes, c’est différent… Pourtant, le code est normalement bon. C’est le même morceau, mais mis à part.
En local, mes deux programmes communiquent bien. Sur le même ordinateur, ou sur deux ordinateurs du même réseau.
Je peux aussi passer par l’adresse de ma box pour me renvoyer des messages. Au final, si je comprends bien, je reste dans une sorte de réseau local même si c’est mon IP publique…
Enfin, pour savoir si mon programme ne fonctionnait pas correctement, j’ai essayé une commande présente sur GNU/Linux : bash echo "Ma commande" > /dev/udp/123.456.789.123/1234
. Mais ça ne fonctionne pas. Pareil pour d’autre petits logiciels trouvés. J’ai même essayé d’envoyer des données à mon téléphone portable en UDP pour simuler un objet connecté, mais toujours rien.
Au résumé, de ce que j’ai pu comprendre, je peux recevoir des données de n’importe qui, peu importe son emplacement sur Terre. Mais je ne peux presque jamais leur envoyer des données (sauf dans le cas mentionné ci-dessus où je réceptionne un message, puis renvoie tout de suite une commande). D’où le "ça semi-fonctionne".
Si jamais vous avez besoin de mon code, je pourrais vous le montrer.
Aussi, c’est la première fois que j’utilise "DatagramSocket" et les "DatagramPacket" ainsi que toutes les fonctionnalités concernant le réseau en Java. De plus, je ne connais peut-être pas encore assez bien l’UDP. Peut-être ai-je oublié quelque chose de simple ?
Quoi qu’il en soit, je vous remercie de m’avoir lu.
A bientôt !
PS : J’ai effectué au préalable une petite redirection de port sur ma FreeBox en UDP.