begin process at 2010 02 09 14:34:47
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Java

 > 

Archives

 > 

Divers

 > 

Serveur multiple qui redistribue les données à TOUT ses clients...


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Serveur multiple qui redistribue les données à TOUT ses clients...

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ée 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 socket [ par tatoufa ] je suis debutantes en java je veut faire une socket java qui envoi un msg entre 1 client et 1 serveur j'ai le code : code client import java.io.*; code source [ par saberla ] [^^happy10] salem 3likom[^^happy10] je suis en train de developper une applicationsur netbeans qui utilise une base de donné mysql en entity classes f problem java requet de superesion [ par kabi14 ] bonjour a tous je souhaite suprimer une donnè de ma BD sql mais ca march pas mm si la requet et just "j estime" Description lorsque je click sur le lecture d'un formulaire avec struts2 [ par mimounireda ] Salut tout le monde. J'ai un formulaire d'authentification que je dois recuperer dans mon application afin de faire le test. Le probleme que j'ai c'es Programmer une fonction recherche avec une ArrayList [ par ZiggyStardust74 ] Bonjour à tous, Je suis en train de programmer une fonction recherche et je rencontre quelques problèmes. En fait j'ai créé un objet appelé produit q Erreur de compilation Java "cannot find symbol" sous ubuntu 9.04 [ par mickeynad ] Bonjour à tous, J'en appelle à votre aide. J'ai fait un petit logiciel en java de gestion des pièces automobiles qui est constitué de 6 classes (héri Suppression d'une occurence de la base MySql [ par Emir83 ] j'ai creer la classe SuppressionBcn afin de supprimer une occurence de la base a l'aide de Hql : [code=java] public class SuppressionBcnBean {


Nos sponsors


Appels d'offres

Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,452 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales