Salut,
Dans le cadre d'un projet pour mon école, je dois programmer un petit jeu réseau.
Le problème est que l'échange de données entre le client et le serveur se fait bien au début, mais dès que le serveur lance le thread s'occupant du client, la réception plante
voilà le code concerné :
Code :
- import java.net.*;
- import java.io.*;
- class ServerListen implements Runnable
- {
- private Socket socket = null;
- private Donnees baseDonnee = new Donnees();
- private DataPlayer joueur=null;
- private ObjectInputStream ois = null;
- private ServerStream serveur=null;
- private ObjectOutputStream oos = null;
- private OutputStream os=null;
- private int _numClient=0;
- public ServerListen(Socket socket, Donnees baseDonnee, ServerStream serveur)
- {
- this.socket=socket;
- this.baseDonnee=baseDonnee;
- this.serveur=serveur;
- try {
- InputStream is = socket.getInputStream();
- ObjectInputStream ois = new ObjectInputStream(is);
- OutputStream os = socket.getOutputStream();
- ObjectOutputStream oos = new ObjectOutputStream(os);
- _numClient = serveur.addClient(oos);
-
- joueur = (DataPlayer)ois.readObject();
- } catch(Exception e) {System.err.println(e);}
- System.out.println("<<ok reception data joueur" );
-
- serveur.sendAll(baseDonnee);
- System.err.println(">>Ok envoi database" );
-
- Thread t = new Thread(this);
- t.start();
- }
- public void run()
- {
- System.out.println("Connection de "+joueur.getPseudo()+" ["+_numClient+"]" );
- try {
- while(true)
- {
- joueur = (DataPlayer)ois.readObject();
- //##############################################################
- System.out.println("<<<ok reception data joueur "+_numClient);
- baseDonnee.updateClient(joueur);
- serveur.sendAll(baseDonnee);
- }
- } catch (Exception e) {System.err.println(e);}
- finally
- {
- try
- {
- System.out.println("deconnection de ["+_numClient+"]" );
- serveur.delClient(_numClient);
- socket.close();
- }
- catch (IOException e){ }
- }
- }}
|
Voici la partie du code du serveur, il plante à l'endroit avec les '###" et envoie comme erreur
java.lang.NullPointerException
Code :
- mport java.io.*;
- import java.net.*;
- import java.awt.*;
- import javax.swing.*;
- import java.awt.event.*;
- class ClientListen extends Thread
- {
- DataPlayer joueur = new DataPlayer();
- Donnees baseDonnees=new Donnees();
- InputStream is = null;
- ObjectInputStream ois = null;
- OutputStream os = null;
- ObjectOutputStream oos = null;
- private Socket socket = null;
- public ClientListen(Socket socket, DataPlayer joueur)
- {
- this.socket=socket;
- this.joueur=joueur;
- joueur.setPseudo("prout" );
- try
- {
- os = socket.getOutputStream();
- oos = new ObjectOutputStream(os);
- is = socket.getInputStream();
- ois = new ObjectInputStream(is);
-
- }
- catch (Exception e) {System.err.println(e);}
- this.start();
- }
- public synchronized Donnees getDonnees()
- {
- return baseDonnees;
- }
- public void run()
- {
- System.out.println("##Ok connexion" );
- try
- {
- while (true)
- {
- oos.writeObject(joueur);
- System.out.println(">>Ok envoi data joueur" );
- //############################################################
- baseDonnees = (Donnees)ois.readObject();
- System.out.println("<<Ok reception database" );
- }
- }
- catch (Exception e) {System.err.println(e);}
- finally
- {
- System.out.println("Connexion interrompue\n" );
- }}}
|
Voilà le code du client, qui plante à l'endroit avec les '###" avec le message suivant :
java.net.SocketException: Software caused connection abort: recv failed
Désolé pour la longueur, et merci d'avance si vous voyez d'où peut venir mon problème
Message édité par Atropos le 26-05-2006 à 18:14:08