Le probleme a déjà été évoqué dans le topic suivant :
http://www.developpez.net/forums/d88...attente-socket
Mais je me permets de relancer un nouveau topic puisque l'autre est marqué résolu et que je rencontre le même genre de problème, mais légèrement différent.
I) --------------------------------------------
J'implémente donc un jeu de plateau en réseau ; le problème que j'ai rencontré (similaire à celui de bobby51) est que la vue du joueur qui vient de jouer et qui après avoir effectué un repaint, se met en attente de l'état de jeu envoyé par l'autre joueur après son coup, ne se met pas à jour.
Il y a donc une sorte de conflit entre le repaint de la GUI et les méthodes bloquantes de la communication reseau. J'avoue que je n'arrive pas vraiment à saisir pourquoi... Ca reste très mystérieux pour moi, et après avoir fait pas mal de recherche je n'ai trouvé aucune réponse.
Par ailleurs j'ai trouvé deux solutions à cela :
a) implémenter des boites de dialogues de confirmation après le repaint, et qui - si confirmation - envoie le nouvel état de jeu au joueur distant
b) exécuter un nouveau thread pour chaque "mise en attente" du nouvel état de jeu.
Donc, en gros ça ne pose pas vraiment problème, mais j'aimerais comprendre un peu plus la raison du conflit (parce que ça m'a pas mal fait galérer :p)
II) --------------------------------------------
Au delà de ça, en tombant sur le topic vers lequel je renvoie ci-dessus, je me suis convaincu de passer de mon serveur monothread à un serveur multithread.
En effet, j'ai commencé par implémenter que le joueur 1 faisait serveur (et n'était pas client local du serveur) et que le joueur 2 était client.
Par ailleurs, j'envisage d'implémenter des parties réseaux jusque 4 joueurs, donc un serveur multithread s'avère indispensable.
Après pas mal de recherche sur internet et notamment lecture du livre "TCP/IP Sockets in JAVA, practical guide for programmers" de K.L CALVERT et M.J DONAHOO (édition Morgan Kaufmann) j'avoue que je bloque toujours.
J'ai bien implémenté un serveur multithread mais le fait est qu'il exécute un nouveau thread (et donc un nouveau socket) à chaque requête d'un client... Or en lisant le topic auquel je renvoie ci-dessus, il est apparement possible et préférable d'implémenter un serveur multithread ou chaque client n'exécute qu'un thread (et donc qu'un seul socket) par partie.
J'avoue que je bloque totalement là-dessus... Impossible pour moi de concevoir (et donc implémenter :p) cela...
Merci d'avance pour votre lecture et votre aide !
Partager