Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Serveur multiple qui redistribue les données à TOUT ses clients... [ Archives / Divers ] (Hellway)

lundi 14 avril 2003 à 02:36:56 | Serveur multiple qui redistribue les données à TOUT ses clients...

Hellway

Voilà, mon problème est assez compliqué et je n'ai trouvé en aucun endroit de la toile réponse à ma question. Je tente donc le coup ici.

Je bosse actuellement sur un Chat et je suis confronté à un problème de redistribution des données. J'ai créé un serveur qui accepte de multiples connections (normal pour un chat) et les clients sont gérés avec un thread.

Seulement, je ne sais pas du tout comment redistribuer les données. Ma class ServeurParticulier, a trois méthodes (Fermeture(), Envoyer() Recevoir()), trois constructeurs (Entrant-InputStream, Sortant-OutputStream et CLient-Socket) contient une sous-classe Recevoir qui hérite de Thread pour lire les messages en boucle.

Connaissez-vous un moyen d'appeller la méthode Envoyer() pour tous les ServeurParticuliers crées par le thread initial ?

Mon script (Il ne répond qu'au client qui lui parle :-( ) :

package chatfusa;
/**
* <p>Titre : Serveur du Chat de Fusa</p>
* <p>Description : Ce serveur a pour rôle de créer un serveur particulier
* pour chaque utilisateurs qui accèdent au chat. Ensuite, il a pour but de
* redistribuer les données.</p>
* <p>Copyright : Copyright (c) 2003</p>
* <p>Société : </p>
* @author non attribué
* @version 1.0
*/
import java.lang.*;
import java.io.*;
import java.net.*;
import java.util.*;

public class Serveur {
public boolean Activation = true;
public static String Partage;
private static int NbUtilisateur;
static final int Port = 8080;
public Serveur() throws IOException
{
NbUtilisateur=0;
ServerSocket ServeurRacine = new ServerSocket(Port);
Information("Serveur " + ServeurRacine + " initialisé.");
try
{
while(Activation=true)
{
// On attend ici jusqu'à avoir
// une demande de Connexion:
Socket Serveur = ServeurRacine.accept();
Information("Client " + Serveur + " initialisé.");
try
{
new ServeurParticulier(Serveur);
}
catch(IOException e)
{
Erreur("Echec de la connexion avec le client " + Serveur + ".");
}
}
}
finally
{
ServeurRacine.close();
}
}
public String CalculerHeure()
{
GregorianCalendar Calendrier = new GregorianCalendar();
int NbHeure = Calendrier.get(Calendar.HOUR);
int NbMinute = Calendrier.get(Calendar.MINUTE);
int NbSeconde = Calendrier.get(Calendar.SECOND);
return NbHeure + ":" + NbMinute + ":" + NbSeconde;
}
public static void Erreur(String Type)
{
new FenetreErreur(Type);
}
public static void Information(String Type)
{
Fenetre.CentreOngletConsoleAffichage.setText(Fenetre.CentreOngletConsoleAffichage.getText() + "\n" + Type);
}
public void Distribuer(String Contenu)
{
Fenetre.CentreOngletAffichage.setText(Fenetre.CentreOngletAffichage.getText() + "\n" + Contenu);
Partage = Contenu;
}
class ServeurParticulier extends Thread
{
private PrintWriter Sortant;
private String Message;
private String Contenu;
private boolean ActivationParticulier = true;
private String NomUtilisateur;
private Socket ServeurParticulier;
private BufferedReader Entrant;
private String Precedent;
// Cette méthode ferme le serveur pour le client en question lorsqu'elle est appelée
public void Fermeture()
{
NbUtilisateur--;
try
{
ServeurParticulier.close();
Information("La connexion avec le client " + ServeurParticulier + " enregistré avec le pseudo : " + NomUtilisateur + " est maintenant fermée.");
}
catch(IOException e)
{
Erreur("La connexion avec le client " + ServeurParticulier + " enregistré avec le pseudo : " + NomUtilisateur + " ne s'est pas fermé correctement");
}
}
public void Envoyer(String Contenu)
{
Sortant.println(Contenu);
}
public String Receptionner()
{
try
{
Contenu = Entrant.readLine();
}
catch(IOException e)
{
Erreur("Reception impossible avec le client " + ServeurParticulier + " enregistré avec le pseudo : " + NomUtilisateur);
ActivationParticulier=false;
}
return Contenu;
}
public ServeurParticulier(Socket ServeurInterm) throws IOException
{
ServeurParticulier = ServeurInterm;
Entrant =
new BufferedReader(
new InputStreamReader(
ServeurParticulier.getInputStream()));
// Autoriser l'auto-vidage:
Sortant =
new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(
ServeurParticulier.getOutputStream())), true);
new Reception();
//**** new Envoi();
}
// Cette classe permet la réception des messages du client, retourne une chaîne.
class Reception extends Thread
{
public Reception()
{
NomUtilisateur = Receptionner();
start();
}
public void run()
{
try
{
while(ActivationParticulier=true)
{
Envoyer(NomUtilisateur + " [" + CalculerHeure() + "] :" + Receptionner());
}
}
finally
{
Fermeture();
}
}
}
//********

}
}





**************************************************
Hellway, Fusa : L'organisation contre l'impérialisme américain.
http://fusa2.free.fr

mercredi 30 avril 2003 à 14:35:52 | Re : Serveur multiple qui redistribue les données à TOUT ses clients...

benohite

je me souviens avoir fais qch dans le genre avec un multicastsocket (cf doc api)
je vais chercher voir si je retrouve pas le source auquel cas je te l enverrais

benohite




-------------------------------
Réponse au message :
-------------------------------

> Voilà, mon problème est assez compliqué et je n'ai trouvé en aucun endroit de la toile réponse à ma question. Je tente donc le coup ici.
>
> Je bosse actuellement sur un Chat et je suis confronté à un problème de redistribution des données. J'ai créé un serveur qui accepte de multiples connections (normal pour un chat) et les clients sont gérés avec un thread.
>
> Seulement, je ne sais pas du tout comment redistribuer les données. Ma class ServeurParticulier, a trois méthodes (Fermeture(), Envoyer() Recevoir()), trois constructeurs (Entrant-InputStream, Sortant-OutputStream et CLient-Socket) contient une sous-classe Recevoir qui hérite de Thread pour lire les messages en boucle.
>
> Connaissez-vous un moyen d'appeller la méthode Envoyer() pour tous les ServeurParticuliers crées par le thread initial ?
>
> Mon script (Il ne répond qu'au client qui lui parle :-( ) :
>
> package chatfusa;
> /**
> * <p>Titre : Serveur du Chat de Fusa</p>
> * <p>Description : Ce serveur a pour rôle de créer un serveur particulier
> * pour chaque utilisateurs qui accèdent au chat. Ensuite, il a pour but de
> * redistribuer les données.</p>
> * <p>Copyright : Copyright (c) 2003</p>
> * <p>Société : </p>
> * @author non attribué
> * @version 1.0
> */
> import java.lang.*;
> import java.io.*;
> import java.net.*;
> import java.util.*;
>
> public class Serveur {
> public boolean Activation = true;
> public static String Partage;
> private static int NbUtilisateur;
> static final int Port = 8080;
> public Serveur() throws IOException
> {
> NbUtilisateur=0;
> ServerSocket ServeurRacine = new ServerSocket(Port);
> Information("Serveur " + ServeurRacine + " initialisé.");
> try
> {
> while(Activation=true)
> {
> // On attend ici jusqu'à avoir
> // une demande de Connexion:
> Socket Serveur = ServeurRacine.accept();
> Information("Client " + Serveur + " initialisé.");
> try
> {
> new ServeurParticulier(Serveur);
> }
> catch(IOException e)
> {
> Erreur("Echec de la connexion avec le client " + Serveur + ".");
> }
> }
> }
> finally
> {
> ServeurRacine.close();
> }
> }
> public String CalculerHeure()
> {
> GregorianCalendar Calendrier = new GregorianCalendar();
> int NbHeure = Calendrier.get(Calendar.HOUR);
> int NbMinute = Calendrier.get(Calendar.MINUTE);
> int NbSeconde = Calendrier.get(Calendar.SECOND);
> return NbHeure + ":" + NbMinute + ":" + NbSeconde;
> }
> public static void Erreur(String Type)
> {
> new FenetreErreur(Type);
> }
> public static void Information(String Type)
> {
> Fenetre.CentreOngletConsoleAffichage.setText(Fenetre.CentreOngletConsoleAffichage.getText() + "\n" + Type);
> }
> public void Distribuer(String Contenu)
> {
> Fenetre.CentreOngletAffichage.setText(Fenetre.CentreOngletAffichage.getText() + "\n" + Contenu);
> Partage = Contenu;
> }
> class ServeurParticulier extends Thread
> {
> private PrintWriter Sortant;
> private String Message;
> private String Contenu;
> private boolean ActivationParticulier = true;
> private String NomUtilisateur;
> private Socket ServeurParticulier;
> private BufferedReader Entrant;
> private String Precedent;
> // Cette méthode ferme le serveur pour le client en question lorsqu'elle est appelée
> public void Fermeture()
> {
> NbUtilisateur--;
> try
> {
> ServeurParticulier.close();
> Information("La connexion avec le client " + ServeurParticulier + " enregistré avec le pseudo : " + NomUtilisateur + " est maintenant fermée.");
> }
> catch(IOException e)
> {
> Erreur("La connexion avec le client " + ServeurParticulier + " enregistré avec le pseudo : " + NomUtilisateur + " ne s'est pas fermé correctement");
> }
> }
> public void Envoyer(String Contenu)
> {
> Sortant.println(Contenu);
> }
> public String Receptionner()
> {
> try
> {
> Contenu = Entrant.readLine();
> }
> catch(IOException e)
> {
> Erreur("Reception impossible avec le client " + ServeurParticulier + " enregistré avec le pseudo : " + NomUtilisateur);
> ActivationParticulier=false;
> }
> return Contenu;
> }
> public ServeurParticulier(Socket ServeurInterm) throws IOException
> {
> ServeurParticulier = ServeurInterm;
> Entrant =
> new BufferedReader(
> new InputStreamReader(
> ServeurParticulier.getInputStream()));
> // Autoriser l'auto-vidage:
> Sortant =
> new PrintWriter(
> new BufferedWriter(
> new OutputStreamWriter(
> ServeurParticulier.getOutputStream())), true);
> new Reception();
> //**** new Envoi();
> }
> // Cette classe permet la réception des messages du client, retourne une chaîne.
> class Reception extends Thread
> {
> public Reception()
> {
> NomUtilisateur = Receptionner();
> start();
> }
> public void run()
> {
> try
> {
> while(ActivationParticulier=true)
> {
> Envoyer(NomUtilisateur + " [" + CalculerHeure() + "] :" + Receptionner());
> }
> }
> finally
> {
> Fermeture();
> }
> }
> }
> //********
>
> }
> }
>
>
>
>
>
> **************************************************
> Hellway, Fusa : L'organisation contre l'impérialisme américain.
> http://fusa2.free.fr

jeudi 29 janvier 2004 à 15:06:37 | Re : Serveur multiple qui redistribue les données à TOUT ses clients...

geko321



Tu peux ossi utilisé CORBA qui enverrais ton message de l'appli client vers le serveur et du serveur vers un otre client.

Par contre ca fait longtemps que j'ai fais ca alors, je peux po trop tédé, mais je sais que CORBA marche


Gk@O0o_____CORBA___PUBLICIS '-_-'



Cette discussion est classé dans : public, string, serveur, client, serveurparticulier


Répondre à ce message

Sujets en rapport avec ce message

[Client/Serveur][Multi-Thread] Serveur/ Fcts synchronisées [ par loring ] J'ai une application Client/Serveur. Les clients accèdent aux fonctions du serveurs qui lui ensuite accède à ma base de données.CLIENT SERVEUR BD P Thread et ThreadGroup comment les fermer ? [ par Omeda ] Bonjour tout le monde, Je suis actuellement entrain de faire une application client/serveur cependant je rencontre quelques difficultés avec les threa Timer [ par marilou ] Salut,je voudrais répéter un échnage de donnée sur un réseau toutes les secondes. Mon serveur demande des infos à ses clients chaque seconde,  chaque connexion a un serveur sftp [ par salim81 ] bonjour, j'arrive pas a se connecter a un serveur sftp via java.j'ai l'exception suivante:Problem encoured while connecting to the serveur xxxx : com. Problème de réception en rtp [ par GIGN90 ] Bonjour à tous voilà j'ai une p'tite question. Je suis entrain de faire un programme client/serveur qui est en gros un chat audio où j'utilise RTP. Mo Serveur Hamster + Client mail [ par ahmed_mido006 ] salut , je voudrais savoir comment utiliser le serveur Hamster , pour receptionner des mail , et comment faire pour les lire " Si je peux avoir une cl Application Client/Serveur FTP en Java [ par medalihentati ] Salut!Aidez moi!!!J'ai un travail à rendre qui consiste en une application Client/Serveur FTP  (Java)(avec une interface pour le client et une autre p [JAVA] Serveur - Client connexion [ par Lem001 ] Voila j'essais de faire un petit prog du style msn, pour communiquer.J'ai ma classe GUI serveur, qui lorsqu'on click sur un bouton appel une methode d serveur client chat en java [ par fifihihi ] fifihihibonjour a tous le mondej'ai envis de creer mon serveur-client chat en java mais avant ca je voulai savoir comment cela marche au niveau reseau JAVA MSN Multiserveur [ par arnauddevasselot ] Bonjour à tous!!!Je voulais vous poser une question, et savoir si vous auriez une idée.Je voudrais faire un MSN Multi-serveur en JAVA, c'est à dire un


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,343 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.