Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1793 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [java] envoie de fichier XML entre 2 clients

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[java] envoie de fichier XML entre 2 clients

n°627620
VinZ13
Posté le 01-02-2004 à 12:17:00  profilanswer
 

Bonjour !
 
Je fais un messenger en java. Je voudrais que le dialogue entre 2 clients, se fasse par l'envoie de fichier XML.
 
Comment puis je faire pour envoyer des fichiers XML ?
 
Pour le moment, j'ouvre le fichier, et le transmet byte a byte.
Mais mon BufferedOutputStream, quand je le ferme apres l'envoie, ferme ma socket de connection entre les clients. Je ne peux donc envoyer qu'un seul fichier, alors que je voudrais établir un dialogue.
 
Si vous avez un autre moyen pour envoyer ce fichier ...
merci :-)

mood
Publicité
Posté le 01-02-2004 à 12:17:00  profilanswer
 

n°627805
the real m​oins moins
Posté le 01-02-2004 à 17:49:42  profilanswer
 

euh que ça soit de l'xml ou autre n'a rien à voir.
que ça soit un fichier ou pas non plus.
 
(juste pour te permettre de préciser tes recherches)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°627841
benou
Posté le 01-02-2004 à 18:19:43  profilanswer
 

pkoi tu fermes l'outputstream ?


---------------
ma vie, mon oeuvre - HomePlayer
n°627870
VinZ13
Posté le 01-02-2004 à 18:36:59  profilanswer
 

benou a écrit :

pkoi tu fermes l'outputstream ?


 
si je ne le ferme pas, l'autre ne reçoit rien

n°627874
VinZ13
Posté le 01-02-2004 à 18:38:26  profilanswer
 

the real moins moins a écrit :

euh  
que ça soit un fichier ou pas non plus.
 


 
c'est un fichier que je veux envoyer ...
alors pkoi ça a rien a voir ?

n°627884
the real m​oins moins
Posté le 01-02-2004 à 18:48:03  profilanswer
 

vinz13 a écrit :


 
c'est un fichier que je veux envoyer ...
alors pkoi ça a rien a voir ?

bah d'une part je vois pas pq tu passerais par le systeme de fichier pour echanger tes messages xml, mais c'est pas ça le probleme... le truc c'est qu'un fileinput/output stream est un flux comme un autre


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°627899
benou
Posté le 01-02-2004 à 18:58:05  profilanswer
 

vinz13 a écrit :


si je ne le ferme pas, l'autre ne reçoit rien


 :heink:  
 
t'as essayé un flush ?


---------------
ma vie, mon oeuvre - HomePlayer
n°628569
VinZ13
Posté le 02-02-2004 à 14:37:20  profilanswer
 

the real moins moins a écrit :

bah d'une part je vois pas pq tu passerais par le systeme de fichier pour echanger tes messages xml, mais c'est pas ça le probleme... le truc c'est qu'un fileinput/output stream est un flux comme un autre


 
comment faire alors ?

n°628570
VinZ13
Posté le 02-02-2004 à 14:37:43  profilanswer
 

benou a écrit :


 :heink:  
 
t'as essayé un flush ?


 
oui

n°628571
lorill
Posté le 02-02-2004 à 14:38:28  profilanswer
 

totoze

mood
Publicité
Posté le 02-02-2004 à 14:38:28  profilanswer
 

n°628624
benou
Posté le 02-02-2004 à 15:49:33  profilanswer
 


ben c'est surement que tu lis mal les données sur ton inputstream de la socket. Montre ton code d'écoute


---------------
ma vie, mon oeuvre - HomePlayer
n°629743
bartleby
Posté le 03-02-2004 à 14:35:45  profilanswer
 

Utilise la serialisation !
Avec des ObjectInputStream, ca passe tout seul.

n°629760
chrisbk
-
Posté le 03-02-2004 à 14:44:36  profilanswer
 

Sujet :  [java] envoie de fichier XML  
 

Code :
  1. throw myXMLFile;


 
 
(dsl)

n°629787
machinbidu​le1974
Do you feel lucky, punk ?
Posté le 03-02-2004 à 14:52:31  profilanswer
 

Oh c'est bon
 
:D

n°629801
benou
Posté le 03-02-2004 à 15:11:18  profilanswer
 

bartleby a écrit :

Utilise la serialisation !
Avec des ObjectInputStream, ca passe tout seul.


nan mais il aura le même problème si il écoute mal les données ur le réseau, mais le msr a l'air d'être mort, il répond plus :/


---------------
ma vie, mon oeuvre - HomePlayer
n°629897
the real m​oins moins
Posté le 03-02-2004 à 16:48:10  profilanswer
 

benou a écrit :


nan mais il aura le même problème si il écoute mal les données ur le réseau, mais le msr a l'air d'être mort, il répond plus :/

euh en plus un ObjectIn/OutputStream  pour balancer du texte, riche idée [:zebra33]


Message édité par the real moins moins le 03-02-2004 à 16:48:21

---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°630044
VinZ13
Posté le 03-02-2004 à 19:15:36  profilanswer
 

benou a écrit :


ben c'est surement que tu lis mal les données sur ton inputstream de la socket. Montre ton code d'écoute


 
C'est pas un probleme d'écoute.
Le premier fichier passe sans probleme, mais apres cet envoie, la socket est fermée. Alors je peux pas répondre.
 
d'un coté, je crée un fichier XML, puis j'envoie son contenu.
de l'autre, je recupere le contenu, puis recrée le fichier XML pour le parcourir et extraire le texte et l'emetteur.
 
mais si tu veux mon code d'écoute:
 
while( runner != null ) {
 try {
  File pfile = new File("E:/Divers/projet/Java/" + pseudo +".xml" );
                byte[] buf = new byte[2048];
                int i;
                InputStream in = socket.getInputStream();
                BufferedInputStream bin = new BufferedInputStream(in,2048);
                FileOutputStream fos = new FileOutputStream(pfile);
                while ((i = bin.read(buf,0,2048)) != -1){  
                        fos.write(buf,0,i);
                       }
               bin.close();
               fos.close();
               XMLReader parser= XMLReaderFactory.createXMLReader("org.apache.crimson.parser.XMLReaderImpl" );
               parser.setContentHandler(monHandler);
               parser.parse(new InputSource(new InputStreamReader(new FileInputStream("E:/Divers/projet/Java/" + pseudo +".xml" ),"UTF8" )));
   }
   catch (Exception e) {
   }
  }

n°630100
the real m​oins moins
Posté le 03-02-2004 à 20:06:47  profilanswer
 

catch (Exception e) {
   }  
 
AYAN !
 
chrisbk, un client pour toi [:icon7]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°630273
darklord
You're welcome
Posté le 03-02-2004 à 21:35:49  profilanswer
 

[:rofl2]

n°630276
chrisbk
-
Posté le 03-02-2004 à 21:38:42  profilanswer
 

Voyez ? pour se debarasser des messages du compilo a quoi il en est reduit ? :o

n°630278
chrisbk
-
Posté le 03-02-2004 à 21:39:08  profilanswer
 

perso j'aurais fait un catch(Throwable) pour etre sur de rien louper [:aloy]

n°630292
darklord
You're welcome
Posté le 03-02-2004 à 21:50:51  profilanswer
 

chrisbk a écrit :

Voyez ? pour se debarasser des messages du compilo a quoi il en est reduit ? :o
 


 
bin oui mais bon c'est une erreur de jeunesse :o

n°630296
chrisbk
-
Posté le 03-02-2004 à 21:54:54  profilanswer
 

DarkLord a écrit :


 
bin oui mais bon c'est une erreur de jeunesse :o  


 
voui, certes, on peut faire plus fin comme gestion d'erreurs
 

n°630371
benou
Posté le 03-02-2004 à 23:20:42  profilanswer
 

vinz13 a écrit :


C'est pas un probleme d'écoute.


 :pfff:  
Dis pas ca avec une telle certitude, ton code te contredit juste après ...
 

vinz13 a écrit :


                while ((i = bin.read(buf,0,2048)) != -1){  
                        fos.write(buf,0,i);  
                       }  


 
un read() ne retourne -1 que lorsque la fin du stream est atteinte. Dans le cas d'une socket, la fin d'un flux intervient quand il est fermé de l'autre côté.
 
Donc c'est tout à fait normal que ton while boucle jusqu'à se que tu ferme le flux : c'est ce que tu lui demande de faire.
 
Comme je te le disais, il faut que tu mettes en place un protocole réseau.
 
exemple : tu envois d'abord la taille du fichier (xml-length: 1234), un retour à la ligne, puis le fichier.
 
ce qui donne pour le code d'écoute :  

Code :
  1. private static final PROTO_XML_LENGTH = ""xml-length :";
  2. //...
  3.    int b;
  4.    while ((b = in.read()) != -1) {
  5.       // lecture de la longueur
  6.       StringBuffer buf = new StringBuffer(20);
  7.       do {
  8.          buf.append((char) b);
  9.       } while ((b = in.read()) != -1);
  10.       if (b == -1) {
  11.          break;
  12.       }
  13.       String line = buf.toString();
  14.       if (! buf.statsWith(PROTO_XML_LENGTH)) {
  15.           throw new NetworkProtocoleException("unknown command", line);
  16.       }
  17.       String lengthStr = line.substring(PROTO_XML_LENGTH.length);
  18.       int length;
  19.       try {
  20.          length = Integer.parseInt(lengthStr);
  21.       } catch (NumberFormatException e) {
  22.           throw new NetworkProtocoleException("bad xml length format", lengthStr, e);
  23.       }
  24.       // lecture du fichier XML  
  25.       // ici je le fait en un bloc pour simplifier mais il faudrait buffuriser la lecture ...
  26.       byte[] xmlFile = new byte[length];
  27.       int readSize = in.read(xmlFile, 0, length);
  28.       if (readSize  != length) {
  29.           throw new NetworkProtocoleException("incomplete transfert : waiting " + length + ", received " + readSize, e);
  30.       }
  31.       // ensuite tu en fais ce que tu veux de ton XML, et tu laisses boucler : on est prêt pour un nouvel envoi
  32.    }


 
je te laisse imaginer le code pour l'envoi ...


Message édité par benou le 03-02-2004 à 23:21:39

---------------
ma vie, mon oeuvre - HomePlayer
n°631106
VinZ13
Posté le 04-02-2004 à 15:15:12  profilanswer
 

chrisbk a écrit :


 
voui, certes, on peut faire plus fin comme gestion d'erreurs
 
 


 
Désolé de n'avoir commencé le java que le mois dernier ...
Pour le moment je me concentre sur le bon fonctionnement de mon programme, je verrais apres pour bien gerer les erreurs ! :-)

n°631118
VinZ13
Posté le 04-02-2004 à 15:22:21  profilanswer
 

benou a écrit :


 :pfff:  
Dis pas ca avec une telle certitude, ton code te contredit juste après ...
 
 
 
un read() ne retourne -1 que lorsque la fin du stream est atteinte. Dans le cas d'une socket, la fin d'un flux intervient quand il est fermé de l'autre côté.
 
Donc c'est tout à fait normal que ton while boucle jusqu'à se que tu ferme le flux : c'est ce que tu lui demande de faire.
 
Comme je te le disais, il faut que tu mettes en place un protocole réseau.
 
exemple : tu envois d'abord la taille du fichier (xml-length: 1234), un retour à la ligne, puis le fichier.
 
ce qui donne pour le code d'écoute :  

Code :
  1. private static final PROTO_XML_LENGTH = ""xml-length :";
  2. //...
  3.    int b;
  4.    while ((b = in.read()) != -1) {
  5.       // lecture de la longueur
  6.       StringBuffer buf = new StringBuffer(20);
  7.       do {
  8.          buf.append((char) b);
  9.       } while ((b = in.read()) != -1);
  10.       if (b == -1) {
  11.          break;
  12.       }
  13.       String line = buf.toString();
  14.       if (! buf.statsWith(PROTO_XML_LENGTH)) {
  15.           throw new NetworkProtocoleException("unknown command", line);
  16.       }
  17.       String lengthStr = line.substring(PROTO_XML_LENGTH.length);
  18.       int length;
  19.       try {
  20.          length = Integer.parseInt(lengthStr);
  21.       } catch (NumberFormatException e) {
  22.           throw new NetworkProtocoleException("bad xml length format", lengthStr, e);
  23.       }
  24.       // lecture du fichier XML  
  25.       // ici je le fait en un bloc pour simplifier mais il faudrait buffuriser la lecture ...
  26.       byte[] xmlFile = new byte[length];
  27.       int readSize = in.read(xmlFile, 0, length);
  28.       if (readSize  != length) {
  29.           throw new NetworkProtocoleException("incomplete transfert : waiting " + length + ", received " + readSize, e);
  30.       }
  31.       // ensuite tu en fais ce que tu veux de ton XML, et tu laisses boucler : on est prêt pour un nouvel envoi
  32.    }


 
je te laisse imaginer le code pour l'envoi ...


 
merci pour ton aide !
je vais bosser la dessus.
 
Donc pour l'envoie, je ne ferme plus mon BufferedOutputStream ?

n°631246
benou
Posté le 04-02-2004 à 16:26:22  profilanswer
 

vinz13 a écrit :


 
merci pour ton aide !
je vais bosser la dessus.
 
Donc pour l'envoie, je ne ferme plus mon BufferedOutputStream ?


ben si tu veux qu'il reste ouvert pour pouvoir continuer à envoyer des trucs, vaut mieux pas le fermer [:spamafote]


---------------
ma vie, mon oeuvre - HomePlayer
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [java] envoie de fichier XML entre 2 clients

 

Sujets relatifs
[PHP] Mettre 1 fonction par fichier ???[java]Découpe de string pour exécuter la fonction associée
[delphi] listing de fichier et sous-repertoires sans recursif ?Java swing et tarantella / citrix / wts
[Java] Acceder a la Base de RegistreDépendance de la version d' Excel pour accès par VB ou Java (POI)
Problème d'ouverture de fichierjava, mettre le programme en attente
[JAVA] question sur JList et JDesktopPane[JAVA] compiler en natif
Plus de sujets relatifs à : [java] envoie de fichier XML entre 2 clients


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR