Bonjour tout le monde,
Je me permet de vous poser une question apres quelques heures d'essais a essayer de faire tourner ce programme ^^
Mon but est ici de faire un jeu en réseau en java, avec un client et un server. Le client se connecte au server et l'envoi de données se fait. J'ai donc un jeu qui fonctionne correctement, mais au moment de l'envoi j'arrive a jouer le tour du joueur 1 puis celui du 2e mais la main ne revient jamais au premier. L'envoi de données doit déconner (ou moi mal coder c'est plus probable ^^).
Je precise que c'est ma premiere application réseau (ça se voit d'ailleurs surement).
Les system.out.println en abondance sont des restes de mes tentatives de deboggage ^^
Voici mon code de la classe Server
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87 import java.io.*; import java.net.*; public class Serveur { int port = 22; ServerSocket s; Socket soc; Socket s2; Coup c = new Coup(); public Coup Getcoup() { return c; } public Serveur(int port) { try { s = new ServerSocket(port); if (s == null) System.out.print("erreur"); } catch (IOException ioe) { System.out.println("erreur"); } System.out.println("Socket crée"); } public void execution() { try { soc = s.accept(); if (soc == null) System.out.print("erreur accept"); } catch (IOException ioe) { System.out.println("erreur accept"); } System.out.println("Socket accepté"); } public Coup recevoirmessage() { ObjectInputStream objIn = null; try { objIn = new ObjectInputStream(soc.getInputStream()); } catch (IOException ioe) { System.out.println("erreur reception"); } catch (NullPointerException e){} System.out.println("message reçu"); try { try { c = (Coup) objIn.readObject(); System.out.println(c.getNbCaseArr()); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (IOException ioe) { } catch (NullPointerException e){} return c; } public void envoyermessage(Coup c) { ObjectOutputStream objout = null; System.out.println("message du serveur 1"+c.getNbCaseDep()); try { try { System.out.println("message du serveur 2"+c.getNbCaseDep()); objout = new ObjectOutputStream(soc.getOutputStream()); System.out.println("message du serveur 3"+c.getNbCaseDep()); objout.writeObject(c); System.out.println("message du serveur au socket"+c.getNbCaseDep()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (NullPointerException e) { } } }
La classe Client qui est une partie
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105 static final int port = 22; Thread thread = new Thread(this); Socket s = null; int cpt = 0; Partie(Socket _s) { s = _s; } Partie(Thread t) { thread.start(); } Coup c; public Coup getcoup() { return c; } public synchronized void connexionserver() { try { s = new Socket("127.0.0.1", 22); } catch (IOException ioe) { System.out.println("erreur"); } System.out.println("connexion effectuée"); } public synchronized void recevoirCoup() { System.out.println("on rentre ici"); ObjectInputStream entree = null; Object i = null; System.out.println("1"); try { System.out.println("2"); entree = new ObjectInputStream(s.getInputStream()); } catch (IOException ioe) { System.out.println("erreur reception"); } catch (NullPointerException e) {} System.out.println("message reçue"); try { try { i = entree.readObject(); System.out.println("coup joué par l'autre joueur"+((Coup) i).getNbCaseDep()+":"+((Coup) i).getNbCaseArr()); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (IOException ioe) { System.out.println("erreur reception"); } System.out.println("message reçue"); this.c = (Coup) i; System.out.println(((Coup) i).getNbCaseDep()); this.getPlateau().deplaceJeton(c); this.ajoutHistorique(c); } public synchronized void envoicoup(){ System.out.println("envoi coup ici"+ c.getNbCaseDep()); ObjectOutputStream objout = null; try { try { objout = new ObjectOutputStream(s.getOutputStream()); System.out.println("objet joueur 2"+ c.getNbCaseDep()); objout.writeObject(c); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (NullPointerException e) { } } public synchronized void run() { while(isAlive()){ System.out.println("122"); if (this.c==null){ this.recevoirCoup(); } else{ this.envoicoup(); this.c=null;} System.out.println("124"); System.out.println("125"); System.out.println("etat"+this.getListCoups().getLast().etat); }
et enfin la classe utilisatrice
Je lance 2 fois la classe utilisatrice, une fois pour le server l'autre pour le client,
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89 import java.io.IOException; import java.util.InputMismatchException; import java.util.Scanner; public class Utilisatrice extends Thread { /** * @param args */ public static void main(String[] args) { Scanner lectureClavier = new Scanner(System.in); Partie p = new Partie(); int j; int t = 0; int dest; boolean sortie = false; Coup co = new Coup(); Coup co2; int cpt =0; Serveur s = new Serveur(22); Thread th = null; Partie c = new Partie(th); Joueur j1 = new Joueur(0, "j1", 0); Joueur j2 = new Joueur(0, "j2", 1); c.initialiser(j1, j2); co.etat = 1; c.ajoutHistorique(co); System.out.println(c.getPlateau().getPl()); System.out.println(" server s client c"); String str = lectureClavier.nextLine(); if (str.equals("s")) { s.execution(); } if (str.equals("c")) { c.connexionserver(); c.start(); } while (true) { if ((c.getListCoups().getLast().etat == 2) && (str.equals("c"))) { System.out.println(c.getPlateau().getPl()); System.out.println("vous etes le joueur 2 et etes client"); System.out.println(" joueur 2, donnez une case"); t = lectureClavier.nextInt(); System.out.println(" et sa destination"); dest = lectureClavier.nextInt(); co = new Coup(j2, t, dest); co.etat = 1; c.getPlateau().deplaceJeton(co); c.ajoutHistorique(co); s.envoyermessage(co); System.out.println(c.getPlateau().getPl()); } else if (cpt > 0) { s.recevoirmessage(); System.out.println("cpt" + cpt); System.out.println("etat" + c.getListCoups().getLast().etat); System.out.println("string" + str); } if ((c.getListCoups().getLast().etat == 1) && (str.equals("s"))) { System.out .println("vous etes le joueur 1 et vous hebergez la partie"); System.out.println(" joueur 1, donnez une case"); t = lectureClavier.nextInt(); System.out.println(" et sa destination"); dest = lectureClavier.nextInt(); co = new Coup(j1, t, dest); co.etat = 2; c.getPlateau().deplaceJeton(co); c.ajoutHistorique(co); s.envoyermessage(co); System.out.println(c.getPlateau().getPl()); cpt++; } } } }
le server une fois crée attend bien le client, celui ci se connecte, la partie se lance.
Le coup(nom de la classe que j'echange) du joueur 1 va bien a celui du joueur2, le joueur 2 joue, et la plus rien, le joueur 1 attend dans le vide.
Si vous pouvez m'aider je vous en serai plus que reconnaissant je me décarcasse dessus depuis quelques jours ^^
merci d'avance
Partager