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

ActionScript 3 Discussion :

Serveur java XMLSocket


Sujet :

ActionScript 3

  1. #1
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 48
    Points : 29
    Points
    29
    Par défaut Serveur java XMLSocket
    Bonjour à tous (et à toutes),

    Je commence un peu à regarder ce qu'on peut faire avec flash et je voudrais faire un serveur java tout bête.
    j'ai pris l'exemple d'adobe pour le côté serveur :

    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
    import java.io.*; 
    import java.net.*; 
     
    class SimpleServer 
    { 
    	private static SimpleServer server; 
        ServerSocket socket; 
        Socket incoming; 
        BufferedReader readerIn; 
        PrintStream printOut; 
     
        public static void main(String[] args) 
        { 
            int port = 8080; 
     
            try 
            { 
                port = Integer.parseInt(args[0]); 
            } 
            catch (ArrayIndexOutOfBoundsException e) 
            { 
                // Catch exception and keep going. 
            } 
     
            server = new SimpleServer(port); 
        } 
     
        private SimpleServer(int port) 
        { 
            System.out.println(">> Starting SimpleServer"); 
            try 
            { 
                socket = new ServerSocket(port); 
                incoming = socket.accept(); 
                readerIn = new BufferedReader(new InputStreamReader(incoming.getInputStream())); 
                printOut = new PrintStream(incoming.getOutputStream()); 
                out("Enter EXIT to exit.\r"); 
                boolean done = false; 
                while (!done) 
                { 
                    String str = readerIn.readLine(); 
                    if (str == null) 
                    { 
                        done = true; 
                    } 
                    else 
                    { 
                        out(str);
                        if(str.trim().equals("EXIT")) 
                        { 
                            done = true; 
                        } 
                    } 
                    incoming.close(); 
                }
                if(done == true)
                {
                	out("Déconnecté");
                }
            } 
            catch (Exception e) 
            { 
                System.out.println(e); 
            } 
        } 
     
        private void out(String str) 
        { 
            printOut.println(str.trim()+ (char)0x00);
            printOut.flush();
            System.out.println(str); 
        } 
    }
    et du côté client, j'ai cela :

    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
    package {
     
    		import flash.net.XMLSocket;
    		import flash.events.DataEvent;
    		import flash.events.MouseEvent;
    		import flash.events.Event;
    		import flash.display.MovieClip;
     
    	public class Main extends MovieClip {
     
    		var _socket:XMLSocket;
     
    		public function Main() {
    			// constructor code
    			this._socket = new XMLSocket();
    			this._socket.connect('127.0.0.1',8080);
    			this._socket.addEventListener(DataEvent.DATA, reponse);
    			this._socket.addEventListener(Event.CLOSE, handlerDeConnexion);
    			btnEnvoyer.addEventListener(MouseEvent.CLICK, envoyer);
     
    		}
     
     
    		private function reponse(event:DataEvent):void 
    		{ 
    			  txtReponse.text = event.data; 
     
     
    		}
     
    		private function handlerDeConnexion(event:Event):void{
     
    			trace ("DECO !");
    		}
     
    		public function envoyer(event:MouseEvent):void{
     
     
    			_socket.send(txtChaine.text+"/n");
    		}
     
    	}
     
    }
    Lorsque je lance l'application, mon textfield txtReponse se remplace bien par "Enter EXIT to exit." mais lorsque j'envoie une chaine de caractère au serveur à l'aide d'un input, il ne m'affiche rien.

    Dans la console non plus, c'est au moment ou je ferme mon application que le serveur affiche (dans la console) "Echo :" et les chaines de caractères que j'ai envoyé suivi d'un espace (alors qu'il aurait dû mettre un "Echo : " par chaine de caractère).

    Voilà, je ne comprends pas bien d'où ça vient et comment résoudre ce problème.


    D'avance, merci =D

  2. #2
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Est-ce une faute de recopie dans le forum le "/n" dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    _socket.send(txtChaine.text+"/n");
    ?

    Si non essaye avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    _socket.send(txtChaine.text+"\n");
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  3. #3
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 48
    Points : 29
    Points
    29
    Par défaut
    Merci, cela m'a un peu aidé ...

    mais avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    _socket.send(txtChaine.text+"\n");
    Il se déconnecte juste après, et dans la console il affiche

    java.net.SocketException: socket closed
    .. ?!

  4. #4
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Sans doute que ce code :
    n'est pas au bon endroit.

    Il serait plutôt à utiliser ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if(done == true)
    {
    	out("Déconnecté");
     
    	incoming.close();
    }
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  5. #5
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 48
    Points : 29
    Points
    29
    Par défaut
    Merci ...

    Comme d'habitude je vais trop vite et je ne prend pas le temps de bien étudier la chose...

    Sinon, je voulais savoir quelle solution adopter pour communiquer le plus simplement possible avec une base de données.

    D'avance, merci.

  6. #6
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 48
    Points : 29
    Points
    29
    Par défaut
    J'ai essayé d'installer mysql connector java, j'ai lu sur la documentation que pour avoir une connexion, il fallait faire de la sorte:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    conn = DriverManager.getConnection("jdbc:mysql://localhost/test?" +
                                                "user=monty&password=greatsqldb");
    Je ne vois pas à quoi le /test? après localhost correspond. Mysql est installé avec wamp.

    =)

  7. #7
    Expert confirmé
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut
    Citation Envoyé par Sladix Voir le message
    Je ne vois pas à quoi le /test?
    test est le nom de la base de données

  8. #8
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 48
    Points : 29
    Points
    29
    Par défaut
    D'accord, ça fonctionne, merci beaucoup =D

    J'aimerais savoir une chose ... comment on peu dire au serveur de renvoyer des données (pour mettre à jour sans que ce soit l'utilisateur qui le fasse) lorsque quelque chose a été changé dans la table ?

    Je suis un peu embêtant avec mes questions mais ça a l'air tellement génial ce qu'on peut faire =D

    D'avance, merci !

  9. #9
    Expert confirmé
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut
    Citation Envoyé par Sladix Voir le message
    D'accord, ça fonctionne,
    bien =D

    Citation Envoyé par Sladix Voir le message
    comment on peu dire au serveur de renvoyer des données
    dans l'exemple que tu as donnée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private void out(String str)
        {
            printOut.println(str.trim()+ (char)0x00);
            printOut.flush();
            System.out.println(str);
        }
    tu peux utiliser l'objet printOut pour envoyer des données au client.

  10. #10
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    comment on peu dire au serveur de renvoyer des données (pour mettre à jour sans que ce soit l'utilisateur qui le fasse) lorsque quelque chose a été changé dans la table ?
    Comme indiqué par slim_java tu peux réutiliser la socket.

    Mais quant à la notification en cas de modification de la base c'est un sujet plus avancé, et d'ailleurs il ne me semble pas que MySQL le gère (à vérifier bien sûr).

    Sinon, si seule une application modifie la base tu peux t'arranger, via des web-services par exemple, pour qu'elle notifie ton application de visualisation.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  11. #11
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 48
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par slim_java Voir le message
    bien =D



    dans l'exemple que tu as donnée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private void out(String str)
        {
            printOut.println(str.trim()+ (char)0x00);
            printOut.flush();
            System.out.println(str);
        }
    tu peux utiliser l'objet printOut pour envoyer des données au client.
    Moui mais ça va renvoyer ça qu'au client qui sera responsable du changement dans la base. Moi je voudrais que tous les clients connectés voient le changement en temps réel.

    Quelle est la solution à adopter dans ce cas ?
    Si c'est les web-service, pouvez vous m'en dire plus ?

  12. #12
    Expert confirmé
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut
    Citation Envoyé par Sladix Voir le message
    Moi je voudrais que tous les clients connectés voient le changement en temps réel.

    Quelle est la solution à adopter dans ce cas ?
    tu veux envoyer un message à tous les clients connectés ?
    tu peux le faire si tu empile tes sockets crées suite à cet appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    incoming = socket.accept();
    dans une collection (vecteur), par la suite tu fais un parcours de ta collection en ouvrant un flux par socket pour envoyer l'alerte... ca me rappelle les systèmes de t'chating :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "  slim_java vient de se connecter "
    pour le sujet des webservices, j'ai pas pratiqué cette technologie mais tu peux voir le forum Java

  13. #13
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 48
    Points : 29
    Points
    29
    Par défaut
    Donc si j'ai bien compris, je déclare un tableau dans la classe,
    je lui ajoute le socket entrant à chaque fois et quand je fais une requête à une bdd par exemple, je renvoie le résultat à tous le tableau ?

    Si c'est bien ça, comment je l'enlève du tableau lorsque l'utilisateur se déconnecte ?

    Merci d'avance =)

  14. #14
    Expert confirmé
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut
    Citation Envoyé par Sladix Voir le message
    Si c'est bien ça, comment je l'enlève du tableau lorsque l'utilisateur se déconnecte ?
    salut. en parcourant ton vecteur qui contient déjà des objets socket, tu fais un test pour chaque Socket pour voir s' il ya une connexion avec le client:
    Exemple en pseudo code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if( !  ( (Socket)(vecteur[i])).isConnected() )
       vecteur[i].remove();
    Il existe énormément de méthodes pour permettre la suppression d'un élément contenu dans un vecteur.

    liens utiles

    Sockets en java :
    http://gfx.developpez.com/tutoriel/java/network/
    http://humbert-florent.developpez.co...reseau/avance/
    http://java.developpez.com/faq/java/?page=reseau
    Collections en Java
    http://fmora.developpez.com/tutoriel...intermediaire/
    http://fmora.developpez.com/tutoriel.../introduction/

  15. #15
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 48
    Points : 29
    Points
    29
    Par défaut
    Bonjour,

    Bon, j'utilise maintenant des threads.

    Je bloque au niveau d'un login...

    côté flash ça donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var xml:XML = <document><pseudo>{inputPseudo.text}</pseudo><pass>{inputPass.text}</pass></document>;
                _socket.send(xml);
                inputPass.text = "";
                inputPseudo.text = "";
    Et côté serveur:

    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
    while (!done) {
        // ... read the next message ...
        String message = readerIn.readLine();
        printOut = new PrintStream(socket.getOutputStream());
        printOut.println(message);
        System.out.println(message);
        if (message == null) 
        { 
            System.out.println( "Elle est nulle");
            done = true; 
        } 
        else 
        { 
            if(this.logged)
            {
            // ... tell the world ...
            System.out.println( "Sending "+message );
            // ... and have the server send it to all clients
            String xml = message ; // tu récupères ta chaine.
            DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
            Document document = parser.parse(new InputSource(new StringReader(xml)));
            String texteMessage = document.getElementById("message").getAttribute("valeur");
            server.sendToAll( texteMessage );
            }else
            {
                System.out.println( "On est dans le else");
                printOut.println("On est dans le esle");
                String xml = message ; // tu récupères ta chaine.
                DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
                Document document = parser.parse(new InputSource(new StringReader(xml)));
                String pseudo = document.getElementById("pseudo").getAttribute("valeur");
                String pass = document.getElementById("pass").getAttribute("valeur");
                if(utilisateur.login(pseudo, pass))
                {
                    this.logged = true;
                    printOut.println("true"+ (char)0x00);
                    printOut.flush();
                }else
                {
                    printOut = new PrintStream(socket.getOutputStream());
                    printOut.println("Mauvais identifiant/mot de passe"+ (char)0x00);
                    printOut.flush();
                }
            }
        }
    if(done == true)
    {
        server.removeConnection( socket );
    }
    }
    Mais lorsque j'envoie, il me met l'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <document>
    On est dans le esle
    [Fatal Error] :1:11: XML document structures must start and end within the same entity.
    Removing connection to Socket[addr=/127.0.0.1,port=4584,localport=8080]
    org.xml.sax.SAXParseException: XML document structures must start and end within the same entity.
        at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
        at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
        at ServerThread.run(ServerThread.java:70)

    Je ne comprends pas bien d'où ça vient ... =/

  16. #16
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Apparemment Flex envoie le flux XML en plusieurs lignes comme le prouve l'output de la variable "message" :
    qui ne contient que la première balise.

    La solution est sans doute de remplacer tous les "\n" générés par XML.toString() par "" via la méthode replace().
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  17. #17
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 48
    Points : 29
    Points
    29
    Par défaut
    Merci de ta réponse... je m'en doutais un peu mais ...

    quand j'essaye ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var xml:XML = <document><pseudo>{inputPseudo.text}</pseudo><pass>{inputPass.text}</pass></document>;
                var messageAEnvoyer:String;
                messageAEnvoyer = xml.toString();
                var pattern:RegExp = /\n/;
                trace(messageAEnvoyer.replace(pattern,""));

    Il me trace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <document>  <pseudo>uoi</pseudo>
      <pass>oiu</pass>
    </document>

    J'ai toujours été nul en RegExp -_-'

  18. #18
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Ça devrait être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var pattern:RegExp = /\n/g;
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  19. #19
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 48
    Points : 29
    Points
    29
    Par défaut
    Tsa ! Je savais que ça devait être un truc à là c** ...

    Merci beaucoup.

    Bon, je suis désolé de demander plein de choses mais je découvre et certains trucs m'échappent encore... ce qui me fait un peu dériver vers le java du coup ...

    Donc j'envoie mon message :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    messageAEnvoyer = xml.toString();
                var pattern:RegExp = /\n/g;
                _socket.send(messageAEnvoyer.replace(pattern,""));
    Que je réceptionne comme ceci en java:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DocumentBuilder parser = DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
                Document document = parser.parse(new InputSource(new StringReader(xml)));
                String pseudo = document.getElementById("pseudo").getTextContent();
                String pass = document.getElementById("pass").getTextContent();
    Mais il me dit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Exception in thread "Thread-0" java.lang.NullPointerException
        at ServerThread.run(ServerThread.java:69)
    (la ligne 69 étant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                String pseudo = document.getElementById("pseudo").getTextContent();
    )

    je ne vois pas à quoi celà correspond...


    Merci d'avance =)

  20. #20
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Pour récupérer une balise en fonction de son nom il faut utiliser la méthode getElementsByTagName, ça devrait donner quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String pseudo = document.getElementsByTagName("pseudo").item(0).getNodeValue();
    Il faudra peut-être une opération supplémentaire pour obtenir la valeur texte de la balise.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/10/2008, 12h28
  2. [JBoss] Réaliser un client-serveur Java
    Par Sylario dans le forum Wildfly/JBoss
    Réponses: 8
    Dernier message: 04/04/2006, 15h28
  3. [Socket] Probleme entre un Client C et un serveur JAVA
    Par bpy1401 dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 28/02/2006, 08h40
  4. [Système] Ecouter un port serveur Java
    Par sozie9372 dans le forum Langage
    Réponses: 3
    Dernier message: 19/01/2006, 21h35
  5. [SOCKET] Client C connecté à un serveur Java
    Par missllyss dans le forum Développement
    Réponses: 2
    Dernier message: 07/06/2004, 13h14

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