-
touché coulé réseau
Bonjour, je fais une bataille navale en réseau et je suis confronté à un soucis. Lorsque mon serveur doit traiter les données, il faut que je sache si le client a ouvert la socket pour de l'envoie ou de la réception. En effet, si le client envoie sa partie mise à jour, je dois l'envoyer à l'autre joueur.
Au contraire, s'il ouvre la connection pour mettre à jour sa partie, le serveur doit lui envoyer.
Pour ce faire, j'ai pensé à regarder si mon InputStream est vide ou non mais je ne sais comment faire.
Merci d'avance ;)
-
Ce serait plus simple si ton client, en se connectant, envoyait un message au serveur plus lui indiquer dans quel sens doit se faire la mise à jour.
-
Slt, dslé pour le retard de ma rep, je n'avais plus internet... donc c'est ok pour ce soucis j'ai fait comme tu m'avais dit.
J'ai un autre pb, lorsqu'un joueur a joué, il envoie sa partie mise à jour au serveur qui met à jour ses données (les données présentes sur le serveur). Mon soucis c'est que j'aimerai qu'à la fin de cette opération le serveur dise à l'autre joueur qu'il doit récupérer la partie mise à jour. Or la connection se fait du client vers le serveur et non pas dans l'autre sens ce qui fait que le serveur ne peut pas alerter l'autre joueur. J'ai pensé à dire aux clients qu'ils aillent regarder sur le serveur toutes les 5 sec mais je pense qu'il doit exister d'autres solutions plus efficaces que d'envoyer des requetes en permanence. Qu'en penses-tu?
Merci d'avance ;)
-
j'en pense que ton serveur a qu'aà prendre l'outputStream de la socket qu'il a avec le client et envoyer le message avec la partie dedans. Tes clients doivent se connecter une fois pour toutes pour toute la durée de la partie, c'est plus simple à gérer et moins lourd au niveau du réseau.
-
Je te remercie de ta réponse, mais je ne sais pas comment faire pour implémenter un client qui se met à l'écoute d'un port puis dès qu'il y a quelque chose sur le flux entrant, se met à jour puis se remet à l'écoute et ceci toute la durée de la partie. Coté serveur, je n'arrive pas à gérer plusieurs client qui se connectent via des ports différents et surtout qui créent une connection permanente avec les client à l'écoute. Pour l'instant, mon serveur se contente de créer un thread pour chaque connection cliente (et effectue des traitements).
-
pourquoi un port différent par client?
Coté client, pour attendre des donnée du serveur, il suffit d'attendre d'avoir des données sur socket.getInputStream()
-
En fait je comptais utiliser un port pour tous les envoies de données. Et chaque client écoute un port différent pour récupérer des mises à jour dès qu'il y en a. C'est pour éviter qu'il y ai conflit entre les envoies et les réceptions.
-
quelle que soit la manière de faire, savoir si on recois des données connsiste à attendre des donnée sur le inputstream.
-
Je te remercie, j'ai bien compris ce principe, mais le soucis c'est que je n'arrive pas à implémenter un serveur qui attends des connections clientes sur plusieurs ports à la fois.
-
sur plusieurs ports = plusieurs ServerSocket. T'as plus alors qu'à faire un Thread qui surveille chaque socket séparément.
-
Je vois ce qu'il faut faire, mais je ne voit pas comment je pourrai l'implémenter :oops: