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

Langage Java Discussion :

échange donnée via Socket


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 29
    Points : 16
    Points
    16
    Par défaut échange donnée via Socket
    Bonjour a tous,


    J'ai un problème avec mes sockets

    Je veux lire un fichier (situé sur la machine cliente) et récuperer le contenu (du texte en l'occurence) sur un autre programme serveur.

    je donne le code qui ne marche pas pour le moment

    Client
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    RandomAccessFile outFile = new RandomAccessFile("C:\\data.xml","r" ); // création du fichier en lecture
    Socket t = new Socket("127.0.0.1",18000); //nouvelle socket pour le transfert du fichier
    // test en local pour le moment.
    OutputStream out2 = t.getOutputStream(); 
     
    byte bb[] = new byte[1024];
    int amount;
    while((amount = outFile.read(bb)) != -1){
    	out2.write(bb, 0,amount);
    }
    out2.flush();
    out2.close();
    outFile.close();
    t.close();

    Serveur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ServerSocket _s = new ServerSocket(18000);
    InputStream in2 = _s.getInputStream();
    byte bb[] = new byte[1024];
    while(in2.read(bb) != -1){
    	XML_data.concat(new String(bb));
    }
    in2.close();

    Mon but est d'avoir le contenu du fichier XML dans mon object String

    Si mon fichier XML est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <personne>
            <nom>TOTO</nom>
            <prenom>titi</prenom>
    </personne>
    Je voudrais que ma chaine contienne : "<?xml version="1.0" encoding="ISO-8859-1"?><personne><nom>TOTO</nom><prenom>titi</prenom></personne>"
    Tout cela pour pouvoir construire l'arbre DOM de cette chaine.


    Merci pour votre aide

  2. #2
    Membre actif
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Points : 231
    Points
    231
    Par défaut
    salut essaye ca
    Coté client

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    PrintWriter out = new PrintWriter(
                                 new BufferedWriter(
                                    new OutputStreamWriter(t.getOutputStream())),
                                true);
    byte bb[] = new byte[1024];
    int amount;
    while((amount = outFile.read(bb)) != -1){
    	out.println(bb);
    }
     
    out.close();
    t.close();

    coté serveur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    BufferedReader in = new BufferedReader(
                                   new InputStreamReader(_s.getInputStream())
                                 );
            while (true) { // C a toi de definir quand est ce qu'il doit s'arreter
               String str = in.readLine();          // lecture du message
     
            }
            in.close();
            _s.close();
    ca devrait marcher comme

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 29
    Points : 16
    Points
    16
    Par défaut
    J'ai essayé ta méthode mais ça me donne des résultats similaires a mon code

    si je fais afficher la chaine str j'obtiens :


    Chaine courante : [B@19821f
    Chaine courante : [B@19821f
    Chaine courante : [B@19821f


    J'ai l'impression que ça ressemble plus à un emplacement mémoire

  4. #4
    Membre actif
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Points : 231
    Points
    231
    Par défaut
    Socket soc = _s.accept(); je ne le voit pas !! coté serveur
    c'est avec soc que tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    InputStream in2 = soc.getInputStream();
    et non avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    InputStream in2 = _s.getInputStream();
    peut etre que c ca
    bonne chance

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 29
    Points : 16
    Points
    16
    Par défaut
    je le fais dans le processus principal.

    Le code que j'ai fournit est en fait dans un classe thread

  6. #6
    Membre actif
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Points : 231
    Points
    231
    Par défaut
    salut,
    je viens d'essayer cela
    côté serveur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ServerSocket s = new ServerSocket(18000);
    		Socket soc = s.accept();
    		InputStream in2 = soc.getInputStream();
    		byte bb[] = new byte[1024];
    		while(in2.read(bb) != -1){
    			System.out.println("lu : " + new String(bb));
    		}
    		in2.close();
    Ca donne a peu pret le bon resultat. En tous cas il lit le fichier XML et l'affiche
    coté client voila ce que j'ai mit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    RandomAccessFile outFile = new RandomAccessFile("C:\\data.xml","r" ); // création du fichier en lecture
    			Socket t = new Socket("127.0.0.1",18000); //nouvelle socket pour le transfert du fichier
    //			 test en local pour le moment.
    			OutputStream out2 = t.getOutputStream(); 
     
    			byte bb[] = new byte[1024];
    			int amount;
    			while((amount = outFile.read(bb)) != -1){
    				out2.write(bb, 0,amount);
    			}
    			out2.flush();
    			out2.close();
    			outFile.close();
    			t.close();
    bonne chance a toi

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 29
    Points : 16
    Points
    16
    Par défaut
    ce que je voudrais c'ets concaténer l'ensemble des chaines bb recues.

    Mais quand je fais ce code ca me donne rien dans la chaine XML_data (size =0)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    String XML_data = "";			
    byte bb[] = new byte[1024];
    while(in2.read(bb) != -1){
    	XML_data.concat(new String (bb));
    	//System.out.println("lu : " + new String(bb));
    }
    System.out.println("lu : " + XML_data);
    System.out.println("size : " + XML_data.length());
     
    in2.close();

  8. #8
    Membre actif
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Points : 231
    Points
    231
    Par défaut
    salut
    avec concat c bizar mais ca marche pas pour moi aussi
    mais avec ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xml_data = xml_data + new String(bb);
    c nikel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ServerSocket s = new ServerSocket(18000);
    		Socket soc = s.accept();
    		InputStream in2 = soc.getInputStream();
    		byte bb[] = new byte[1024];
    		String xml_data = "";
    		while(in2.read(bb) != -1){
    			xml_data = xml_data + new String(bb);
     
    		}
    		System.out.println("lu : " + xml_data);
    		in2.close();

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 29
    Points : 16
    Points
    16
    Par défaut
    c'est bon j'ai trouvé

    il faut pas utiliser la fonction concat
    un simple += marche mieux !!




    Merci pour ton aide

  10. #10
    Membre actif
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Points : 231
    Points
    231
    Par défaut
    n'oublie pas le bouton résolu si c réglé

    bonne chance

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Transfert de données via socket / send - receive
    Par Myokara dans le forum Général Python
    Réponses: 4
    Dernier message: 16/05/2014, 17h08
  2. Réponses: 3
    Dernier message: 21/04/2012, 11h35
  3. Réponses: 0
    Dernier message: 20/04/2012, 16h35
  4. Envoi de données via socket
    Par Popeye63 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 17/10/2007, 13h05
  5. erreur lors de l'envoie de donné via les socket.
    Par poporiding dans le forum C++
    Réponses: 1
    Dernier message: 23/05/2006, 14h23

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