IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

[Socket][mini-projet] Quelques questions


Sujet :

Entrée/Sortie Java

  1. #1
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut [Socket][mini-projet] Quelques questions
    Bonsoir,

    Je suis en train de m'entrainer avec les sockets et grace à certains tuto, j'ai réussi à faire quelque chose, maintenant pour m'entrainer, j'aimerais créer un mini-programme style msn mais tres basique; c'est à dire, chaque client peut envoyer un message et tous les autres le voient affichés dans un Jpanel.

    J'arrive parfaitement à faire ca avec un seul client(mais ca sert à rien ^^), mais je ne sais trop comment m'y prendre pour le faire avec plusieurs... On m'a dit d'employer des threads mais je ne vois pas trop comment faire non plus...

    Auriez-vous une idée ? Pour le moment mon code ressemble à ca :

    classe Server
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    package principal;
    import socket.SocketFonction;
     
    public class Server {
    	public static SocketFonction net = new SocketFonction();
     
    	public static void main(String[] args) {
    		net.CreateServeur(9999);
    		String msg;
    		String reponse;
    		for(;;){
    			msg = net.getMsg();
    			reponse = msg;
    			net.sendMsg(reponse);
    		}
    	}
    }
    classe Gui(juste le main et l'event
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    public static SocketFonction net = new SocketFonction();
    public static void main(String[] args){
    		net.CreateClient("127.0.0.1",9999);
    		Gui gui = new Gui();
    		gui.setVisible(true);
    		for(;;){
    			Texte = Texte + net.getMsg() + "\n";
    			textArea.setText(Texte);
    		}
    	}
    public void keyPressed(KeyEvent e) {
    					 if(e.getKeyCode() == KeyEvent.VK_ENTER){
    						net.sendMsg(jTextField1.getText() + " : "+ jTextField.getText());
    						jTextField.setText(null);
    					 }
    				}
    La classe dans laquelle j'ai les diverses fonctions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    public class SocketFonction {
    	ServerSocket SServer;
    	Socket SClient;
    	DataInputStream is;
        PrintStream os;
     
    	public boolean CreateServeur(int port){
    		System.out.println("Wait client");
    		try {
    			SServer = new ServerSocket(port);
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
     
    		try {
    			SClient = SServer.accept();
    	        is = new DataInputStream(SClient.getInputStream());
    	        os = new PrintStream(SClient.getOutputStream());   
    	    }catch (IOException e) {
    	           System.out.println(e);
    	           return false;
    	    }
    	    System.out.println("client connected");
    	    return true;
    	}
     
    	public boolean CreateClient(String address,int port){
    		try {
    			SClient = new Socket(address, port);
    		} catch (UnknownHostException e) {
    			e.printStackTrace();
    			return false;
    		} catch (IOException e) {
    			e.printStackTrace();
    			return false;
    		}
    		try {
    			is = new DataInputStream(SClient.getInputStream());
    			os = new PrintStream(SClient.getOutputStream());
    		} catch (IOException e) {
    			e.printStackTrace();
    			return false;
    		}	
    		return true;
    	}
     
    	//Envoie un message
        public boolean sendMsg(String msg){
        	msg.replace('\n',' '); // les retour a la ligne sont remplacé par des espaces
        	os.println(msg);
        	return true;
        }
     
        //Reçoit un message
        public String getMsg(){
        	try{
        		return is.readLine();
         	}catch (IOException e){
         		System.out.println(e);
         		return null;
    	    }
        }
    voila....

    est ce que ce code est bien ou pas du tout ?

    J'aimerais aussi créer une interface principale sur laquelle on pourrait créer un serveur et se connecter à un serveur, est ce possible ?

    Je sais que je demande beaucoup...

    Merci d'avance de ceux qui auront le courage de s'attarder sur ce post et de m'aider à surmonter mon ignorance ^^

  2. #2
    Membre actif Avatar de fremsoi
    Inscrit en
    Août 2003
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 201
    Points : 217
    Points
    217
    Par défaut
    Comme tu l'as dis ton post un peu long ....

    Enfin bon, il suffit que Server hérite de Thread
    Tu définis le run() de Thread dans Server

    Essaie de travailler avec ServerSocket et Socket !! au lieu de SocketFonction

    petit exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    public class Server extends Thread {
     
    	private ServerSocket socketServer;
    	private InfosSocket infServer; // class perso qui contient port et IpAdress
     
    	/**
             * @param port
             * @throws IOException
             */
    	public Server (InetAddress ip, int port){
    		infServer = new InfosSocket(ip,port);
     
    		this.startServer();
    		this.start();
    	}
     
    	public void startServer(){
    		try{
    			socketServer = new ServerSocket(infServer.getPort(),50, infServer.getIpAdress());
    		}
    		catch(IOException e){
    			//Error 
    		}		
    	}
     
    	public void stopServer(){
    		try {
    			socketServer.close();
    		} catch (IOException e) {
    			//erreur 
    		}
     
    	}
     
    		public void run(){
    		try{
    			while (!socketServer.isClosed()) {
    				Socket connexion = socketServer.accept();
    				Thread c = new CustomerManagement(socketServer, connexion); // Gestion d'un client
     
    			}
    		}
    		catch(IOException e){
    			//erreur
    		}
    	}
     
    }
    et class qui gere tes clients :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    public class CustomerManagement extends Thread {
     
    	private ServerSocket socketServer;
    	private Socket socketCustomer;
    	private BufferedReader input;
    	private PrintWriter output;
     
    	public CustomerManagement(ServerSocket socketServ, Socket socketCust){
    		socketServer 	= socketServ;	
    		socketCustomer 	= socketCust;
     
    		try {
    			input = new BufferedReader(new InputStreamReader(socketCustomer .getInputStream()));
    			output = new PrintWriter(socketCustomer .getOutputStream(),true);
    			this.start();
    		}
    		catch(IOException e){
    			//Erreur
    		}
     
    	}
     
    	public void run() {
    		String msgReceived = "";
    		try {
    			while (!msgReceived.equals("CLIENT_EXIT")) {
    				msgReceived = input.readLine();
    				actionMessage(msgReceived);
    			}
    		} catch (IOException e) {
    			System.out.println(e.getMessage());
     
    		}
    	}
     
    	public void actionMessage(String message){
    		// TODO
    	}
    }
    AH ! t'as mis du code j'en mets plein aussi
    Mais normallement il devrait te faire comprendre le systèmre en tout cas j'espère ....

  3. #3
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    merci,

    donc si je comprend bien :
    • - Pour créer un serveur, il suffit que j'appelle le constructeur de la classe serveur que tu m'a donnés ?
      - Pour ajouter un client, il suffit que j'appelle le constructeur de la classe client ?
      - Donc je peut faire une interface avec un bouton créer serveur qui appelle le constructeur serveur et on lui passe les valeurs qu'on veut et un bouton qui appelle le constructeur du client avec les bonnes valeurs ?
      - Et je peut aussi ajouter une interface dans le constructeur client, pour y mettre "msn" dedans ?
      - Pourquoi est ce déconseillé de faire appel à une classe supplémentaire pour des fonctions supplémentaires ?
    merci

    P.S. T'inquiete pas pour le plein de codes que tu m'as donné, je prefere ca avec un rien d'explication quand meme ^^

  4. #4
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Je n'ai pas lu tes codes exhaustivement, mais j'ai vu que ta classe client contient un ServerSocket. Apparemment, on peut se connecter à un client.
    Ce n'est pas du tout la solution la plus simple, car tu t'orientes vers une architecture pair à pair en faisant ca.

    Je te conseille dans un premier temps de créer un serveur auquel tous les clients se connectent. Il relaiera tous les messages reçus vers tous les autres clients qui lui sont connectés. Niveau distribution, c'est le plus simple.
    Les réseaux pair à pair posent beaucoup de problèmes de conception, et une architecture client-serveur sera beaucoup plus rapide et enrichissante pour toi.

    Tu as besoin de 4 classes :
    - un GUI client
    - un communicateur client, utilisant un Socket
    - un ServerSocket coté serveur, qui lancera un thread communicateur serveur à chaque connection. Il contient une méthode permettant d'accéder à tous les communicateurs serveur créés.
    - un communicateur serveur, qui implémente Runnable, et qui prend en paramètre le ServerSocket qui l'a créé ainsi que le Socket qui lui sert à communiquer. Il dispose d'une fonction permettant d'envoyer un message.

  5. #5
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Je n'emploie pas de serverSocket dans ma classe client. J'ai un nouveau socket client dans la classe client et un ServerSocket dans ma classe serveur.

    par contre il est vrai que dans l'exemple que m'a donné fremsoi, il y a un serverSocket dans le client

    Je n'ai pas tout à fait compris la notion de pair à pair et celle de client/serveur...

    et d'ailleurs pas non plus celle de classe communicateur client et de commnunicateur serveur...

    merci

  6. #6
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    J'avais mal compris ton code, désolé.

    Le principe de l'architecture client serveur, c'est qu'il y a un ordinateur dans le réseau qui a un role particulier (celui de recevoir et relayer tous les messages et de maintenir la liste des clients connectés). Tu as deux programmes différents : le client, qui interagit avec l'utilisateur et le serveur, et le serveur, qui n'interagit qu'avec les clients (il n'a pas de gui).

    Dans une architecture pair à pair, les connexions peuvent se faire directement entre les différentes machines, il n'y a qu'un seul programme. Cependant, tu as des problèmes genre : comment avertir tout le monde qu'un chatter est parti (facile) ? Comment trouver les gens qui sont déjà en train de chatter quand je lance le programme (très difficile) ?

    Le squelette de code que je te propose (complémentaire de celui de fremsoi) est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    public class Server {
      private ServerSocket sSock;
      private Collection<ServerConnexion> connexions;
     
      ... //accepte des connexions, et crée un 
          //ServerCommunicator pour chaque connexion
     
      public ServerConnexion[] getConnexions() {
         return connexions.toArray();
      }
    }
     
    public class ServerConnexion { // complément de CustomerManagement
      Server server;
      Socket sock_cote_server;
      ...
      public void sendMessage(String msg) { ... }
     
      public void repeatMessageToEverybody(String msg) {
        ServerConnexion[] others = server.getConnexions();
        for(int i = 0; i < others.length; i++) {
          if(!others[i].equals(this))
            others[i].sendMessage(msg);
        }
      }
    }
     
    // Le client tu sais faire.
    public class ClientConnexion {
      Socket ...
      ClientGui ...
      // Un thread qui écoute et affiche les messages
      // Une fonction permettant d'envoyer un message au serveur
    }
     
    public class ClientGui { ...}
    [EDIT] fremsoi ne t'a envoyé que du code pour le serveur !

  7. #7
    Membre actif Avatar de fremsoi
    Inscrit en
    Août 2003
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 201
    Points : 217
    Points
    217
    Par défaut
    Oui, je t'ai passé le coté serveur.

    Le server et la gestion des clients ( coté server )

  8. #8
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    oulalala,

    je commence à m'embrouiller

    J'ai maintenant 4 classe :

    ClientConnexion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    public class ClientConnexion extends Thread {
    	private Socket socketCustomer;
    	private BufferedReader input;
    	private PrintWriter output;
    	private String texte = "";
     
    	public ClientConnexion(ServerSocket socketServ, Socket socketCust) {
    		socketCustomer = socketCust;
     
    		try {
    			input = new BufferedReader(new InputStreamReader(socketCustomer.getInputStream()));
    			output = new PrintWriter(socketCustomer.getOutputStream(), true);
    			this.start();
    		}catch (IOException e){System.out.println(e.getMessage());}
    	}
     
    	public void run() {
    		String msgReceived = "";
    		try {
    			while (!msgReceived.equals("CLIENT_EXIT")) {
    				msgReceived = input.readLine();
    				actionMessage(msgReceived);
    			}
    		}catch(IOException e){System.out.println(e.getMessage());}
    	}
     
    	public void actionMessage(String message) {
    		texte += message + "\n";
    		ClientGui.textArea.setText(texte);
    	}
    }
    ServerConnexion(J'ai vraiment pas compris à quoi elle sert...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class ServerConnexion {
    	Server server;
    	Socket Socket;
     
    	public void sendMessage(String msg) {    }
     
    	public void repeatMessageToEverybody(String msg) {
    		ServerConnexion[] others = server.getConnexions();
    		for (int i = 0; i < others.length; i++) {
    			if (!others[i].equals(this))
    				others[i].sendMessage(msg);
    		}
    	}
    }
    Server
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    public class Server extends Thread{
    	private ServerSocket SocketServer;
    	private Collection<ServerConnexion> connexions;
     
    	public ServerConnexion[] getConnexions() {
    		return (ServerConnexion[]) connexions.toArray();
    	}
     
    	public void startServer() {
    		try {
    			SocketServer = new ServerSocket(9999, 50);
    		} catch (IOException e) {System.out.println(e.getMessage());}
    	}
     
    	public void stopServer() {
    		try {
    			SocketServer.close();
    		} catch (IOException e) {System.out.println(e.getMessage());}
    	}
     
    	public void run() {
    		try {
    			while (!SocketServer.isClosed()) {
    				Socket connexion = SocketServer.accept();
    				Thread c = new ClientConnexion(SocketServer, connexion); // Gestion d'un client 
    				c.start();
    			}
    		} catch (IOException e) {System.out.println(e.getMessage());}
    	}
    }
    et une classe ClientGui qui pour le moment ne contient qu'une interface graphique...

    Comme je l'ai marqué plus haut, je ne comprends pas la classe ServerConnexion...

    Est ce que mes classes sont justes ?

    P.S. Ce n'est quel mélange de vos deux codes...

    P.P.S. Si je vous embete, laissez tomber ce post aux oubliettes ^^

    P.P.P.S : Par contre, si vous répondez, ce serait tres sympathique de votre part

  9. #9
    Membre actif Avatar de fremsoi
    Inscrit en
    Août 2003
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 201
    Points : 217
    Points
    217
    Par défaut
    Là tu as pas compris ServerConnexion = CustomerManagement = ConnexionServer

    Donc tu as une classe de trop ....

    Et puis tu n'a pas de classe Client !!??!!

    Il te faut :

    • Une classe Serveur
      Une classe qui fait les actions Serveur (ConnexionServer ou CustomerServer ou ConnexionClient peut importe le nom)
      Une classe cliente ( que tu as pas mis )
      une classe IHM client
      (optionnel classe IHM Serveur)


    PS : arrête de balancer tout ton code à chaque fois.
    Il faut chercher un peu ... pour comprendre au moins ce que tu fais

  10. #10
    Membre actif Avatar de fremsoi
    Inscrit en
    Août 2003
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 201
    Points : 217
    Points
    217
    Par défaut
    PS : on essaie de t'aider mais si tu fais juste des mixte de code sans trop savoir pourquoi tu y arriveras pas

    ou alors sans savoir pourkoi ...

  11. #11
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    bon je suis dsl, mais je suis vraiment trop laché...

    J'ai pas encore vraiment compris la structure de tout ca...

    Alors je vais abandonenr cette partie serveur

    merci de m'avoir aidé

  12. #12
    Membre actif Avatar de fremsoi
    Inscrit en
    Août 2003
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 201
    Points : 217
    Points
    217
    Par défaut
    Non c pas ça !!!

    C pas en lachant que tu comprendras.
    Essaie de comprendre d'abord les connexion (sans thread)
    Ensuite essaie de comprendre les thread
    et enfin un serveur multi client.

    enfin tu fais comme tu veux mais du coup mets résolu.
    ou alors essai de comprendre et si souci sur concept ou sur des points, post


    mais pas tout ...

  13. #13
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    sans thread, c'est à dire le code que j'ai posté au début, J'ai compris ce que ca faisait :
    • - la classe serveur :[list:231d97a45f] - Crée un serveur
      - Ensuite attend un message du client
      - Et dès qu'elle l'a recu, envoie un message au client

    - Ma classe GUi(client) :
    • - Crée un client dans le main
      - Attends un message du serveur et quand elle l'a recu fait ce qui est nécessaire
      - En cliquant sur le bouton, envoie un message au serveur

    - Ma classe de fonction :
    • - Contient des fonctions pour envoyer des msg, recevoir des messages, créer des clients, créer des serveurs
    [/list:u:231d97a45f]
    Tout ca j'ai compris Mais le problème est pour que cette appli marche avec plusieurs clients(nombre de clients indéfinis). Je sais ce qu'est un thread mais j'ai pas compris l'architecture avec des Threads que vous me proposez....

    Voila ou j'en suis

    Le projet que je veut faire, je l'imagine ainsi :
    • - le client envoie un message au serveur
      - Le serveur recoit se message et peut etre fait qqch dessus
      - Le serveur envoie ce message à tous les clients connectés
      - Les clients recoivent le message et apres je le traite
      - Et ainsi de suite

  14. #14
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    j'ai réussi qqch

    Mon serveur accepte maintenant plusieurs clients

    Par contre je ne sais pas encore comment faire pour qu'il réenvoie le message à tous les clients...

    Est ce que c'est obligatoire de faire 2 threads ? Moi j'ai fais un seul thread pour le serveur.

    P.S. Je ne mets mon code que si vous le voulez. Alors demandez si vous en avez besoin

  15. #15
    Membre actif Avatar de fremsoi
    Inscrit en
    Août 2003
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 201
    Points : 217
    Points
    217
    Par défaut
    Un seul Thread suffit

    (en fait Server peut implémenter -et en plus c mieux- que Runnable au lieu de Thread)


    pour envoyer à tous les clients, il faut que tu utilises la methode de xavlours.
    A chaque Thread que tu créées dans ton Server, tu le stock dans un Vector.

    puis qd tu as un message a envoyer, tu parcours ton vector, tu récupère à chaque fois la connexion et tu envoie

  16. #16
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Je ne connais pas du tout les vecteurs, tu pourrais me donner une courte description de ceux-ci ?

    Sinon, je pourrais faire un tableau de de PrintStream et le parcourir en envoyant un message sur chaque ? (J'aurais juste un problème de grandeur de tableau, puisque j'ai un nombre de client indéfini et infini), ce qui impliquerait une méthode dans le Thread, puisque mon printstream est "construit" dans celui-ci.

    Merci

  17. #17
    Membre actif Avatar de fremsoi
    Inscrit en
    Août 2003
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 201
    Points : 217
    Points
    217
    Par défaut
    POur faire super super simple est une Tableau infini, une collection d'objet, comme les Arraylist.

    Mais le plus par rapport aux ArrayList est la synchronisation.

    Voilà!
    Donc tu peux faire un Vector de printStream.

  18. #18
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Je crée mes printstream dans le Thread, ca veut dire que je fais ou mon vecteur ? et ou ma fonction qui va envoyer à tous le monde le msg ? dans la classe serveur ?

  19. #19
    Membre actif Avatar de fremsoi
    Inscrit en
    Août 2003
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 201
    Points : 217
    Points
    217
    Par défaut
    Tu crées le vecteur avant ...., dans ta classe serveur.

    Cmme ça tu passes en paramètre le vecteur au thread
    Et quand tu y toucheras ( vu que c'est par adresse) , il sera modifier dans le serveur

  20. #20
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Merci beaucoup, je vais essayer ca ce soir si j'ai le temps ou demain et je te redis

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Projet] Quelques questions sur les droits.
    Par Caxton dans le forum Projets
    Réponses: 4
    Dernier message: 27/05/2010, 08h39
  2. Projet Access, quelques questions..
    Par minnemo dans le forum Modélisation
    Réponses: 2
    Dernier message: 12/02/2008, 15h16
  3. Quelques questions pour petit projet
    Par lapos dans le forum Développement 2D, 3D et Jeux
    Réponses: 8
    Dernier message: 21/12/2007, 17h22
  4. [2D] Mini-projet : question pour une interface graphique
    Par kitsune dans le forum Développement 2D, 3D et Jeux
    Réponses: 15
    Dernier message: 10/03/2006, 14h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo