XML et les socket

bboldow Messages postés 2 Date d'inscription mercredi 23 juillet 2003 Statut Membre Dernière intervention 2 janvier 2004 - 2 janv. 2004 à 00:05
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 - 19 mars 2004 à 23:20
Bonjour à tous,

je suis en train de faire des essais pour développer par la suite un client serveur qui dialogue en s'envoyant des données xml.

Je vous met un début de code du serveur

public class XMLServer extends Thread{

MBSErrorMessage MBSEM;
ServerSocket SS;
boolean ok=true;

public XMLServer() {

try {
SS = new ServerSocket(MSBConfig.PORT);
SS.setReuseAddress(true);
} catch (Exception e) {
MBSEM = new MBSErrorMessage(this, e);
System.exit(0);
}
start();
}

public void run() {

while (ok) {

try {
Socket S = SS.accept();
System.out.println("Serveur connecte");

File f = new File("..\\\\datas\\\\doc.xml");
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(f);

// Use a Transformer for output
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer();

DOMSource source = new DOMSource(document);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(S.getOutputStream()));

StreamResult result = new StreamResult(bw);
transformer.transform(source, result);

} catch (Exception e) {
MBSEM = new MBSErrorMessage(this, e);
}
}
}

}

et celui du client

public class MusicBandClient extends Thread{

MBSErrorMessage MBSEM;
boolean ok=true;

public MusicBandClient() {
start();
}

public void run() {

try {
Socket S = new Socket("localhost", MSBConfig.PORT);
System.out.println("Socket cree");

// Use a Transformer for output
TransformerFactory tFactory =
TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer();

InputStream in = S.getInputStream();
BufferedReader d = new BufferedReader(new InputStreamReader(in));
StreamSource source = new StreamSource(d);

StreamResult result = new StreamResult(System.out);

transformer.transform(source, result);


} catch (Exception e) {
MBSEM = new MBSErrorMessage(this, e);
}

}

public static void main(String[] args) {

MusicBandClient MBC = new MusicBandClient();
}

}

Ca fonctionne bien à part un petit détails

Je ne recoit pas le tag de fin du document dans le client

Ex:

le fichier

<?xml version="1.0" encoding="iso-8859-1"?>

<document-xml>
<tag>Deux mots</tag>

<sous-tag pres="italique">un premier mot</sous-tag>
<sous-tag pres="gras">un deuxième mot</sous-tag>

</document-xml>

est bien envoyé au niveau du serveur, par contre au niveau du client, je recoit

<?xml version="1.0" encoding="iso-8859-1"?>

<document-xml>
<tag>Deux mots</tag>

<sous-tag pres="italique">un premier mot</sous-tag>
<sous-tag pres="gras">un deuxième mot</sous-tag>

et le tag de fin </document_xml> a disparu ...

Voilà, si quelqu'un a une idée merci d'avance car je bloque un peu ... :)

5 réponses

cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
2 janv. 2004 à 08:39
:big) Neodante :big)

Est-ce si important au fond .... en as-tu vraiment besoin ?
Sinon je n'ai pas de réponse je ne manipule pas encore XML avec Java mais cela ne devrait pas tardé !
@+
0
bboldow Messages postés 2 Date d'inscription mercredi 23 juillet 2003 Statut Membre Dernière intervention 2 janvier 2004
2 janv. 2004 à 16:30
Oui pour moi c'est important sinon je poserai pas la question ... ;)
0
PROMETHEE111 Messages postés 12 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 10 juin 2004
21 févr. 2004 à 01:39
PROMETHEE
Salut,

il suffit de rajouter bw.close(); du coté server après ton transform, en tout cas cela fonctionne chez moi (sans il manque un tag, avec il apparait :) ), soit :

/**************/
DOMSource source = new DOMSource(document);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(S.getOutputStream()));
StreamResult result = new StreamResult(bw);
transformer.transform(source, result);
bw.close();
//suite de ton source

essaye cela...
0
MetalDestroyer Messages postés 37 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 21 août 2004
19 mars 2004 à 15:00
Bonjour bboldow,

Je voudrai connaitre les import que tu as effectué pour l'ouverture du fichier xml ?
Car, en effet, je dois trouver un moyen d'ouvrir un xml, mais, malgré les docs que je trouve par ci par là.
Je n'ai pas pu ouvrir l'xml.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
19 mars 2004 à 23:20
:big) Neodante :big)

import org.xml.... normalement !
@+

[Responsable www.neogamedev.com]
0
Rejoignez-nous