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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 29
    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 éclairé
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    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 averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 29
    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 éclairé
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    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 averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 29
    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 éclairé
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    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

+ 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