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

avec Java Discussion :

Ecoute port en UDP


Sujet :

avec Java

  1. #1
    Membre confirmé Avatar de hugoclo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    615
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 615
    Points : 480
    Points
    480
    Par défaut Ecoute port en UDP
    Bonsoir,
    Je débute en java et je souhaite écouter un port en UDP.
    J'utilise ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
         try {
          int port = 6020;
        DatagramSocket dsocket = new DatagramSocket(port);
       byte[] buffer = new byte[2048];
          DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
        while (true) {
            dsocket.receive(packet);
     String msg = new String(buffer, 0, packet.getLength());
            jTextArea1.setText(msg);
            System.out.println(packet.getAddress().getHostName() + " "
                + msg);
       packet.setLength(buffer.length);
          }
        } catch (Exception e) {
          System.err.println(e);
        } 
        }
    Sur ma console j'ai bien les données qui défilent mais je n'ai rien dans ma Jtextarea.
    En fait je n'ai plus la main sur mon interface graphique.
    Comment afficher les données dans mon JTextArea?
    Merci
    Lorsque le sage montre la lune du doigt l'idiot regarde le doigt.

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Points : 533
    Points
    533
    Par défaut
    bonjour,

    la méthode setText() remplace tout le texte de ton JTextArea, en d'autres termes ça efface à chaque fois avant d'écrire et comme tu as une boucle "infinie" je pense que tu ne vois pas l'affichage.

    pour écrire à la suite essaie la méthode append(String s)

    Si ce n'est pas suffisant, c'est que la réception monopolise les ressources et java ne peut plus gérer l'affichage.

    Il faudra envisager d'utiliser un thread pour la réception UDP qui rendra la main régulièrement afin que l'affichage du JTextArea puisse se faire.

  3. #3
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut
    Bonjour, c'est en fait clairement un problème de "multi-tâche", en dehors du fait que setText remplace le texte, ce n'est pas lui qui explique pourquoi il reste vide. En fait, il ne reste pas vide, mais votre interface graphique ne peut jamais rafraîchir son état et donc afficher le texte puisque la méthode receive est bloquante, et que votre code se trouve dans votre interface graphique, ce qui gèle complétement swing, d'où se sentiment de perte de contrôle de l'application. Comme vous le propose hugoclo, ou plus précisément dans la même idée, déplacez votre code qui gère la communication réseau dans un SwingWorker par exemple...
    Dans votre interface graphique, un simple bouton pour démarrer la communication, un autre pour l'arrêter. Pensez à donner un moyen d'accès au JTextArea à votre SwingWorker, il se chargera lui de renseigner le texte. Ainsi déporté, votre code de communication ne bloquera plus Swing, et votre fenêtre continuera de fonctionner indépendamment du SwingWorker.
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  4. #4
    Membre confirmé Avatar de hugoclo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    615
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 615
    Points : 480
    Points
    480
    Par défaut
    Merci
    Lorsque le sage montre la lune du doigt l'idiot regarde le doigt.

  5. #5
    Membre confirmé Avatar de hugoclo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    615
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 615
    Points : 480
    Points
    480
    Par défaut
    J ai suivi vos conseils,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.SocketException;
    import javax.swing.SwingUtilities;
    import javax.swing.SwingWorker;
     
    /**
     *
     * @author Seb et Lae
     */
    public class Accueil extends javax.swing.JFrame {
     
        /**
         * Creates new form Accueil
         */
        public Accueil() {
           // 
            initComponents();
     
        }
     public static void reception_Udp(){
        //On crée un Worker générique, cette fois
     
        SwingWorker sw = new SwingWorker<Integer, String>(){
          protected Integer doInBackground() throws Exception {
            DatagramSocket serverSocket = new DatagramSocket(6020);
                byte[] receiveData = new byte[1024];
                while (true) {
                 try {
    	          DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
                      serverSocket.receive(receivePacket);
                      String sentence = new String( receivePacket.getData()); 
                      System.out.print(sentence);
     
                           }
    	        catch (SocketException se) {
    	            se.printStackTrace();
    	        }
    	        catch (IOException ioe) {
    	            ioe.printStackTrace();
                    }
     }
     
          }
     
           public void done(){           
            if(SwingUtilities.isEventDispatchThread())
              System.out.println("Dans l'EDT ! ");
     
          }        
        };
        //On lance le SwingWorker
        sw.execute();
      }
        /**
         * This method is called from within the constructor to initialize the form.
         * WARNING: Do NOT modify this code. The content of this method is always
         * regenerated by the Form Editor.
         */
        @SuppressWarnings("unchecked")
        // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
        private void initComponents() {
     
            setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
     
            javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
            getContentPane().setLayout(layout);
            layout.setHorizontalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGap(0, 946, Short.MAX_VALUE)
            );
            layout.setVerticalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGap(0, 632, Short.MAX_VALUE)
            );
     
            pack();
        }// </editor-fold>                        
     
        /**
         * @param args the command line arguments
         */
        public static void main(String args[]) {
     
            //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
            /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
             * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
             */
            try {
                for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                    if ("Nimbus".equals(info.getName())) {
                        javax.swing.UIManager.setLookAndFeel(info.getClassName());
                        break;
                    }
                }
            } catch (ClassNotFoundException ex) {
                java.util.logging.Logger.getLogger(Accueil.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            } catch (InstantiationException ex) {
                java.util.logging.Logger.getLogger(Accueil.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            } catch (IllegalAccessException ex) {
                java.util.logging.Logger.getLogger(Accueil.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            } catch (javax.swing.UnsupportedLookAndFeelException ex) {
                java.util.logging.Logger.getLogger(Accueil.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            }
            //</editor-fold>
     
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    new Accueil().setVisible(true);
                    reception_Udp();
                }
            });
        }
    le probleme c'est que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     System.out.print(sentence);
    ne donne rien.
    Sur le port 6020 il y a bien de la vie.
    Lorsque le sage montre la lune du doigt l'idiot regarde le doigt.

Discussions similaires

  1. tshark port TCP/UDP conversion pcap > csv
    Par a1331 dans le forum Réseau
    Réponses: 0
    Dernier message: 15/04/2013, 16h42
  2. Ecoute Port Série
    Par valangel dans le forum 4D
    Réponses: 1
    Dernier message: 19/11/2011, 00h37
  3. Détecter l'ouverture d'un port TCP/UDP sous WinXp
    Par foufar2009 dans le forum Windows
    Réponses: 5
    Dernier message: 08/04/2009, 00h19
  4. port aléatoire udp
    Par Haknaton dans le forum Réseau
    Réponses: 2
    Dernier message: 15/03/2009, 22h09
  5. Ecouter Port tcpip
    Par labchara dans le forum Delphi
    Réponses: 2
    Dernier message: 29/03/2007, 00h46

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