Salut,
Je suis en train de faire une application client-serveur.J'essaye d'enregistrer le flux de sortie dans un tableau.
Au depart j'utilisais un Tableau de vecteur mais par la suite j'ai implemente ma propre classe qui devait enregistre le PrintWriter de chaque client ainsi que certaines autres informations.
Lorsque j'ajoute un client j'envoie PrintWriter out qui devient null alors qu'a sa creation il ne l'est pas.
Avez vous une idee?
Voici ma class qui enregistre les PrintWriter
Voici le thread du server qui est lance a chaque nouvelle connexion d'un client vers le serveur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 class Table{ //cette classe permet l association du flux avec le client:) Pour l instant on enregistre que la position //plus tard on creera un objet joueur PrintWriter out; int pos; Table(){ this.pos=-1; this.out=null; } Table(PrintWriter o,int pos){ this.pos=pos; this.out=out; } Table(PrintWriter o){ this.pos=-1; this.out=out; } public int getPosition(){ return this.pos; } public void setPosition(int a){ this.pos=a; } public PrintWriter getWrite(){ return this.out; } } class TableClients{ private Table tab[]; private int nbclients=0; private int MaxClients; TableClients(int n){ MaxClients=n; tab=new Table[n]; init(); } public void init(){ for(int i=0;i < MaxClients;i++) tab[i]=new Table(); } //fonctions qui renvoie la position ou le PrintWriter out
Voici le code de addClient qui se trouve dans la class serveur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 BlablaThread(Socket s, BlablaServ blablaServ) { _blablaServ=blablaServ; _s=s; try { _out = new PrintWriter(_s.getOutputStream()); _in = new BufferedReader(new InputStreamReader(_s.getInputStream())); System.out.println("out vaut "+_out);//test de _out : il n'est pas null _numClient = blablaServ.addClient(_out,-1); //l'appel de addClient avec les parametre } catch (IOException e){System.out.println("exception thread server pour le out et in"); } _t = new Thread(this); _t.start(); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 synchronized public int addClient(PrintWriter out,int position) { _nbClients++; _tabClients.addElement(out,position); System.out.println("out vaut : "+_tabClients.elementAt(0)); //cela m'affiche null return _tabClients.size()-1; }
Partager