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

Java Discussion :

N’exécute pas les programmes en même temps


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2014
    Messages : 57
    Par défaut N’exécute pas les programmes en même temps
    Bonjour,

    Je suis en train de faire un programme composé d'un serveur et de plusieurs client, à la connexion d'un client on demande de taper un pseudo. Cependant quand je lance plusieurs client, le programme se concentre seulement sur un seul client alors que j'utilise les threads.
    je vous met une partie des programmes de la partie serveur et client pour que vous puissiez regarder ce qu'il ne va pas.

    coté serveur
    serveur
    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
    public class Serveur {
    	public static final Statement Null = null;
    	public static Thread t;
    	public static ServerSocket ss = null;
    	public static Statement state1 = Null;
    	public  PrintWriter out;
     
    	public static void main(String[] args) throws IOException, SQLException, InterruptedException{
    		 state1 = SQL.sql("quizz");
    		 ss = Communication.initconnexion();
    	     t = new Thread( new Connexion(ss, state1));
    	     t.start();
    	     //Communication.quitter();	       
    	}	
    }
    connexion
    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
    public class Connexion implements Runnable {
    	public static ServerSocket socketserver = null;
    	public static Socket socketduserveur = null;
    	public static BufferedReader in = null ;
    	public static PrintWriter out;
    	public static Statement state2;
    	public Thread t1;
     
    	public Connexion(ServerSocket ss, Statement state) {
    		socketserver = ss;
    		state2 = state;
    	}
     
    	public void run() {
    		  try {
    			  while(true){
    		  socketduserveur = socketserver.accept();
    		  in = new BufferedReader(new InputStreamReader(socketduserveur.getInputStream()));
    		  out = new PrintWriter(socketduserveur.getOutputStream());
    		  out.println("Veuillez choisir un pseudo: ");
    		  out.flush();
    		  System.out.println(in.readLine());
    		  out.println("Vous etes connecte");
    		  out.flush();
    		  t1 = new Thread ( new Questionnaire("quizz", state2));
    		  t1.start();
    			  }
    		  }catch (IOException e) {
    				e.printStackTrace();
    			} 
    	}
    }
    coté client
    client
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class Client {
    	public static void main(String[] zero) throws IOException {
     
    		Scanner sc = new Scanner(System.in);
    		String b = "" ;
    		int a =0;
    		int c =0;
    		int rep;
    		Thread t; 
     
    		t = new Thread( new Connexion());		    
    		t.start();
    connexion
    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
    public class Connexion implements Runnable {
    	static Socket socket;
    	static BufferedReader in;
    	static PrintWriter out =null;
    	Scanner sc = new Scanner(System.in);
    	static String pseudo;
    	public void run() {
     
    		    try {
    				socket = new Socket("192.168.137.1",2009);	 
    				in = new BufferedReader (new InputStreamReader (socket.getInputStream()));
    				out = new PrintWriter(socket.getOutputStream());
    		        System.out.println(in.readLine());
    		        pseudo = sc.nextLine();
    		        Connexion.out.println(pseudo + " est connecte");
    		        Connexion.out.flush();
    		    	}catch (UnknownHostException e) {
    		    		e.printStackTrace();
    		    	} catch (IOException e) {
    		    		e.printStackTrace();
    		    	}	        
    			}
     
    }

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Si tu veux que le serveur soit disponible juste après avoir accepté un client, tu dois continuer dans un thread tout ce qui se passe après accept(), bien sûr -_-°.
    Tu pensais que du moment que tu mettais Thread n'importe où ça allait forcément faire un truc qui t'arrange ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2014
    Messages : 57
    Par défaut
    Je ne comprend ce qui est apres accept() est dans un Thread non ?

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Bah... Tout est toujours dans un thread. Mais l'idée c'est que ce qui se passe après accept() soit dans un nouveau thread et pas dans le même thread que accept().
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2014
    Messages : 57
    Par défaut
    ok je pense avoir compris, à chaque interventon du serveur je dois faire un nouveau Thread ? Mais ça va faire beaucoup de threads et donc beaucoup de classes

  6. #6
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Sans avoir lu ton code dans le détail, je remarque que les variables de la classe Connexion sont statiques. Jettes un oeil du coté d'un cours java pour comprendre ce que veut dire static. Ca expliquerait pourquoi tu n'arrives à gérer qu'un client...

Discussions similaires

  1. lancer 16 programmes en même temps
    Par piotr dans le forum Langage
    Réponses: 9
    Dernier message: 23/03/2007, 16h31
  2. Grant sur toutes les tables en même temps
    Par jer64 dans le forum SQL
    Réponses: 3
    Dernier message: 25/09/2006, 07h59
  3. Réponses: 5
    Dernier message: 03/08/2006, 16h13
  4. Réponses: 3
    Dernier message: 23/03/2006, 17h59

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