CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Besoin d'un pro en java (client-serveur)

Extends
Extends
Niveau 9
08 juin 2010 à 19:41:15

Bonsoir à tous !

Je suis entrain de faire un chat en client - serveur et j'ai besoin de votre aide !
En effet, j'aimerais que lorsque mes clients (oui, j'ai inclut le multi-thread) envoient un message au serveur, le serveur renvoi immédiatement ce même message aux clients.
Aucun soucis soucis jusque là, mon soucis se situe au niveau de la reception de ce message aux différents clients..

J'ai essayer de faire une méthode telle que :

public void receptionMessage()
{
String message="";
while(true)
{
try{
message = (String)this.ois.readObject();
//ici on affiche le message recu dans la JTextArea du client
this.jtaConversation.append(message);

}
catch(Exception e){System.out.println(e);}
}
}

Le problème est que je ne sais pas du tout ou appeler cette méthode dans mon code... Lorsque je l'implémente, mes clients ne se lancent même plus...

J'ai vraiment besoin de votre aide !
Merci beaucoup pour toutes vos futures réponses :)

Extends
Extends
Niveau 9
08 juin 2010 à 19:44:26

Quelques précisions : J'utilise Eclipse comme IDE.
A l'heure actuelle, je peux connecter autant de client que je veux à mon serveur et tout les clients peuvent communiquer avec le serveur sans aucun soucis, mais les autres clients ne voient pas les messages des autres clients... Il n'y a que sur le serveur que s'affiche les messages en gros.
Le tout est en local pour le moment (127.0.0.1 ou localhost pour les puristes :p )

dnob700
dnob700
Niveau 10
08 juin 2010 à 23:32:50

Tu pourrais lancer deux thread sur chacun de tes clients (i.e. un thread en plus du thread par défaut), où l'un reçoit les messages de l'interface utilisateur et envoie les messae tapé au serveur et l'autre thread écoute la socket et affiche tout les messages reçu.

C'est probablement la manière la plus simple de procéder, même s'il y en a plein d'autre.

_skip
_skip
Niveau 10
09 juin 2010 à 08:36:30

La lecture du socket est obligatoirement asynchrone sinon elle bloquerait l'application jusqu'à ce que quelque chose arrive dans le buffer d'entrée.

Par ailleurs dans ton code :

//ici on affiche le message recu dans la JTextArea du client
this.jtaConversation.append(message);

Sache que ce sera illégal de toucher à l'interface graphique depuis un autre thread que le thread qui l'a créée. La solution se trouve du coté de invokeLater.

Sinon, je te conseille de décorer les streams du Socket avec des objets servant à manipuler du texte :
http://java.sun.com/javase/6/docs/api/java/io/InputStreamReader.html

Et n'oublie pas qu'il te faut aussi envoyer un délimiteur dans le socket pour informer la destination que le message est complet et prêt à être traité.

Extends
Extends
Niveau 9
09 juin 2010 à 13:06:49

Salut à tout les deux et merci de vos réponses :)

J'ai pensé exactement à la même chose que dnob700, à savoir créé un 2eme Thread qui se lance en même temps que celui des clients mais ensuite j'ai l'erreur dont me fait part _skip : Je ne peut pas modifier l'interface graphique de la JFrame depuis un autre Thread que celui qui l'a créé.
Donc en fin de compte le 2eme Thread en parallèle du Premier pour le client ne fait absolument rien..
Je pense que je vais me tourner vers un StreamReader voir se que ça donne.

En tout cas, merci beaucoup de vos lumières ! Je vous tiendrais au courant si j'avance bien ou si je patauge :p) )

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment