IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Applets Java Discussion :

Applet Java datagram UDP


Sujet :

Applets Java

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Applet Java datagram UDP
    Bonjour,

    Je suis en train de créer une applet java qui est chargée d'envoyer un datagram UDP a un serveur (pour piloter une carte électronique).
    Ce datagramme est composé d'un header, de l'adresse ip de la machine cliente (celle qui a lancé cet applet via une page html) et de commandes hexa spécifique au µP).
    Je cherche donc comment lire l'adresse ip de la machine qui a lancé cet applet afin de l'intégrer à mon datagram.

    Merci de toute réponse qui pourrait me faire avancer, car je bloque depuis un moment !

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    sur le datagrampsocket que tu utilise pour envoier tes packets udp, il y a une méthode getLocalAdress

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Applet Java datagram UDP
    Citation Envoyé par tchize_ Voir le message
    sur le datagrampsocket que tu utilise pour envoier tes packets udp, il y a une méthode getLocalAdress

    Bonjour, merci pour ta réponse.

    Lorsque j'exécute mon applet sous Eclipse, la méthode "socket.getLocalSocketAddress" me renvoie : 0.0.0.0/0.0.0.0:10001 (10001 est le numéro de port de ma socket), la méthode socket.getRemoteSocketAddress() me renvoie "null"

    Lorsque j'exécute mon applet sur mon serveur, les méthodes "socket.getLocalSocketAddress()" et "socket.getRemoteSocketAddress()" me renvoient également "null".

    J'ai également essayé la méthode getLocalHost() de la class InetAddress, mon applet (lancée sur le serveur) me renvoie le localhost "127.0.0.1".

    En fait, mon problème est "assez" simple : à partir d'une machine client je charge une applet qui se trouve sur un serveur.
    Je dois récupérer l'adresse ip de cette machine pour la passer en paramètre au datagram que je vais envoyer au serveur.
    Fastoche, non ?

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    C'est pas comme ça que ça marche. La machine client a, a priori, plusieurs adresses IP. Tu peux parcourir cette liste en regardant dans la liste des NetworkInterface avec ce code
    http://docs.oracle.com/javase/tutori...s/listing.html

    Mais ça ne t'aidera pas à trouver la bonne. Une machine bureau de Madame Michu a, en général 3 ou 4 adresses différentes aujourd'hui: localhost, wifi, réseau cablé, ipv4 et ipv6. Sans parler qu'il s'agit pour toutes d'adresses locales qui ne servent à rien à ton serveur.

    Par contre, tu peux envoyer un paquet UDP à ton serveur. De son coté il va recevoir un DatagramPacket sur lequel il y a une IP et un port, ce sont celles de ton client, paire adresse/port vers lesquels ton serveur devra envoyer la réponse.

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Applet Java datagram UDP
    Citation Envoyé par tchize_ Voir le message
    C'est pas comme ça que ça marche. La machine client a, a priori, plusieurs adresses IP. Tu peux parcourir cette liste en regardant dans la liste des NetworkInterface avec ce code
    http://docs.oracle.com/javase/tutori...s/listing.html

    Mais ça ne t'aidera pas à trouver la bonne. Une machine bureau de Madame Michu a, en général 3 ou 4 adresses différentes aujourd'hui: localhost, wifi, réseau cablé, ipv4 et ipv6. Sans parler qu'il s'agit pour toutes d'adresses locales qui ne servent à rien à ton serveur.

    Par contre, tu peux envoyer un paquet UDP à ton serveur. De son coté il va recevoir un DatagramPacket sur lequel il y a une IP et un port, ce sont celles de ton client, paire adresse/port vers lesquels ton serveur devra envoyer la réponse.

    OK pour le protocole UDP, avec les adresses et ports déclarés dans l'entête des datagram's, mais mon problème est que je dois transmettre dans la zone data du datagramm, l'adresse du client qui a ouvert l'applet. (ce datagram est du genre : "header + ip_de_la_machine_qui_a_fait_la_demande + commande") car le µcontrôleur qui va recevoir le datagramm va comparer l'adresse contenue dans le datatgram et l'adresse de la machine qui est connectée. Si ces deux adresses sont différentes - ou absentes - le µcontrôleur ne répond pas !
    Lorsque je mets l'adresse de la machine "en dur" dans le code, ça fonctionne parfaitement. Mais comme il est prévu que plusieurs machines sur un LAN puissent accéder à cet applet, je dois inclure l'ip de manière dynamique.

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    tu as le code (cf lien) pour lister les ip de la machine. Après a toi de trouver une formule magique pour savoir par laquelle ton paquet va être envoyé.

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    J'ai trouvé une solution :

    A partir du code de mon applet pour lire l'adresse ip de la machine cliente afin de l'intégrer dans le datagramme qui va être envoyé vers le serveur :

    - lire l'adresse du serveur :

    ip_serveur = InetAddress.getByName(getCodeBase().getHost());

    - créer une socket à l'adresse du serveur, port 80 :

    socket = new Socket("ip_serveur", 80);

    - utiliser la méthode getLocalSocketAddress :

    addr_client = socket.getLocalSocketAddress();

    System.out.println(addr_client);

    qui renvoie : /192.168.1.85:2040 (l'ip est celle de la machine qui a ouvert l'applet et 2040 est le port de réponse du serveur)

    - fermer la socket :

    socket.close();

    Ensuite, je peux traiter l'envoi et la réception des datagrams.

    Attention cependant : un antivirus, selon sa configuration, peut empêcher d'ouvrir le port 80.


  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    pour cette méthode, j'ouvrirais la socket vers le périphérique que t'essaie de commander. Rien ne garanti que la même ip sera utilisée pour le périphérique et pour l'applet. Par exemple, l'utilisateur est connecté en 3G à ton serveur et le périphérique se trouve dans un LAN qui n'a pas accès à ton serveur d'application.

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    pour cette méthode, j'ouvrirais la socket vers le périphérique que t'essaie de commander. Rien ne garanti que la même ip sera utilisée pour le périphérique et pour l'applet. Par exemple, l'utilisateur est connecté en 3G à ton serveur et le périphérique se trouve dans un LAN qui n'a pas accès à ton serveur d'application.
    Salut,
    Yes, mais pour moi pas de problème d'ip qui pourraient changer puisque la carte à commander et les pc de commande susceptibles de connecter le serveur sont en ip fixe sur un LAN.
    Merci pour tes réponses

Discussions similaires

  1. applet java
    Par radi dans le forum Applets
    Réponses: 1
    Dernier message: 08/06/2005, 16h00
  2. Bordures autour d'un applet java sous firefox
    Par laloi dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 03/05/2005, 15h23
  3. [Conversion]Applet Java Vers Java Web Start
    Par robin206 dans le forum JWS
    Réponses: 2
    Dernier message: 20/04/2005, 09h28
  4. flash & applet java
    Par subzero82 dans le forum Flash
    Réponses: 3
    Dernier message: 23/01/2005, 17h04
  5. [VB.NET] Passage de parametres à une Applet Java
    Par AntiSAL dans le forum ASP.NET
    Réponses: 4
    Dernier message: 18/08/2004, 11h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo