Probleme de communication entre un serveur et son client

magicyan Messages postés 11 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 12 juin 2003 - 15 mai 2003 à 17:59
magicyan Messages postés 11 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 12 juin 2003 - 16 mai 2003 à 14:27
Bonjour,

Cela fait 3 jours que j'essaye de transmettre un fichier xml d'un serveur a un client. Du coté du serveur tout se passe bien mais le client n'a pas l'air de bien receptionner ce fichier : Il me lance tout un tas d'exception.
Voici le code que j'utilise pour le client :

package mille_bornes;

import java.io.*;
import java.net.*;

public class Client extends Thread{
private ObjectOutputStream output;
private ObjectInputStream input;
private LitMainXml fic;
private String ip;
private int port;
ObjectInputStream ois;

public Client(String Ip, int Port) {
ip=Ip;
port=Port;
this.start();
}

public void run()
{
Socket client;

try {
client = new Socket( InetAddress.getByName( ip ), port );
output = new ObjectOutputStream( client.getOutputStream() );
input = new ObjectInputStream( client.getInputStream() );
try {
System.out.println(input.readObject() instanceof File);
try {
File f = (File)input.readObject();
ois = new ObjectInputStream(new FileInputStream(f));
}
catch(EOFException e) {
System.out.print("fin de fichier");
}

boolean t = true;
while(t) {
try {
System.out.println(ois.read());
}
catch(EOFException e) {
t=false;
}
}
}
catch ( ClassNotFoundException cnfex ) {
System.out.println( "Le type de l'objet transmit est inconnu" );
}
output.close();
input.close();
client.close();
}
catch ( IOException e ) {
e.printStackTrace();
}
}

private void sendData( File f )
{
try {
output.writeObject( f );
output.flush();
}
catch ( IOException cnfex ) {
System.out.println("probleme d'ecriture du fichier");
}
}

public LitMainXml getLitMainXml(){
return fic;
}
}

Voila, j'espere que ca interressera quelqu'un.

Merci d'avance!!

5 réponses

cs_Duss Messages postés 890 Date d'inscription lundi 8 avril 2002 Statut Membre Dernière intervention 29 juillet 2004 11
16 mai 2003 à 09:12
salut,
pourrais tu envoyer les messages d erreurs aussi stp
Duss
0
magicyan Messages postés 11 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 12 juin 2003
16 mai 2003 à 10:09
Ok, donc voila les erreurs qu'il m'affiche sur le client sachant que sur le serveur, tout s'est bien déroulé, c'est à dire qu'il a lancé l'appli des que le client s'est connecté) :

java.lang.NullPointerException at mille_bornes.Plateau.actionPerformed(Plateau.java:424)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1764) at

javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1817)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:419) at

javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:257) at

javax.swing.AbstractButton.doClick(AbstractButton.java:289) at

javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1109) at

javax.swing.plaf.basic.BasicMenuItemUI$MouseInputHandler.mouseReleased(BasicMenuItemUI.java:

943) at java.awt.Component.processMouseEvent(Component.java:5093) at

java.awt.Component.processEvent(Component.java:4890) at

java.awt.Container.processEvent(Container.java:1566) at

java.awt.Component.dispatchEventImpl(Component.java:3598) at

java.awt.Container.dispatchEventImpl(Container.java:1623) at

java.awt.Component.dispatchEvent(Component.java:3439) at

java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3450) at

java.awt.LightweightDispatcher.processMouseEvent(Container.java:3165) at

java.awt.LightweightDispatcher.dispatchEvent(Container.java:3095) at

java.awt.Container.dispatchEventImpl(Container.java:1609) at

java.awt.Window.dispatchEventImpl(Window.java:1585) at

java.awt.Component.dispatchEvent(Component.java:3439) at

java.awt.EventQueue.dispatchEvent(EventQueue.java:450) at

java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:197) at

java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) at

java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:144) at

java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:136) at

java.awt.EventDispatchThread.run(EventDispatchThread.java:99)java.lang.NullPointerException

at mille_bornes.Client.run(Client.java:41)truefin de fichier

*************************************************

La premiere exception renvoie a cette ligne :

Init_Main(client.getLitMainXml().litMain(),0);

Donc voici le source de la fonction Init_Main :

public void Init_Main(Carte[] t,int a){
for(int i=0;i<t.length;i++) {
ImageIcon ico = new

ImageIcon(mille_bornes.Plateau.class.getResource(t[i].getCheminCarte()));
cartes[i].setIcon(new

ImageIcon(ico.getImage().getScaledInstance(Constantes.SIZE_X_75,Constantes.SIZE_Y_75,Image.S

CALE_FAST)));
if(a==0) {
if(i==0) main.add(nom_J1);
cartes[i].setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
cartes[i].setPreferredSize(new

Dimension(Constantes.SIZE_X_75,Constantes.SIZE_Y_75));
main.add(cartes[i]);
}
}
if(a==0) {
cartes[6].setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
cartes[6].setPreferredSize(new Dimension(Constantes.SIZE_X_75,Constantes.SIZE_Y_75));
cartes[6].setBackground(Constantes.COLPLATEAU);
cartes[6].setBorder(null);
main.add(cartes[6]);
main.add(Points);
}
}

*************************************************

Et le source de la classe LitMainXml :

public class LitMainXml {
private Carte tab[];
.
.
.
public Carte[] litMain(){
return tab;
}
}

*************************************************

La fonction LitMain est dans la classe client que j'ai posté au début.
Voila, j'esperer que ca pourra t'eclairer, moi, je patauge toujours!!!
Merci!!!
0
cs_Duss Messages postés 890 Date d'inscription lundi 8 avril 2002 Statut Membre Dernière intervention 29 juillet 2004 11
16 mai 2003 à 10:23
bon apparement, ton erreur vient d un objet que tu utilises et que tu as oublié d instancier dans ta classe Plateau dans la fonction actionPerformed !!
D autre part,
public class LitMainXml {
private Carte tab[];
.
.
.
public Carte[] litMain(){
return tab;
}
}
n aurais tu pas oublié d instancier ton tab ????
tu le declare la c est tout
Duss
0
magicyan Messages postés 11 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 12 juin 2003
16 mai 2003 à 10:29
je vais regarder pour la classe plateau .
Le tableau tab en fait est instancié dans le constructeur :

Document doc=p.getDocument();
Node e =doc.getDocumentElement();
NodeList L = ((Element)e).getElementsByTagName("carte");
tab=new Carte[L.getLength()];
for(int i=0;i<tab.length;i++){
tab[i]=new Carte((Integer.valueOf(L.item(i).getNodeValue())).intValue());
}

Merci, je vais regarder ma classe plateau et je te tient au courant.
Encore milles fois merci!!!
0

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

Posez votre question
magicyan Messages postés 11 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 12 juin 2003
16 mai 2003 à 14:27
Bon, j'ai bien avancé grace a vous. Merci!!
J'ai un nouveau problème : c'est que le client ne recoit qu'un octet sur 2 de ce que le serveur lui envoie!!!
Par exemple, le serveur envoie 63,120,109,108,32,118,101, et le client recoit : 63, 109,32,118.

Savez-vous d'où ca peut venir?

Merci d'avance!!
0