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 :

communication entre deux machines distantes en utilisant le modèle client/serveur


Sujet :

Entrée/Sortie Java

  1. #1
    Membre à l'essai
    Femme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Autre

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2014
    Messages : 14
    Points : 14
    Points
    14
    Par défaut communication entre deux machines distantes en utilisant le modèle client/serveur
    Bonjour,
    Pouvez-vous me dire s'il vous plaît comment je permets à un serveur d'écouter sur deux ports ainsi de communiquer entre deux machines distantes. Je travaille sur les systèmes distribués et mon but est de communiquer entre deux machines distantes en utilisant le modèle client-serveur tel que


    si par exemple :

    serveur : " bonjour "
    client : if msgServeur = bonjour
    then

    repondre : cv

    else

    client : bonjour

    voici le code source et j'ai developpé mais j'arrive pas à communiquer les deux machines :

    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
    63
    64
    65
    66
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.Scanner;
     
     
    public class serveurrrr {
     
     
    	public static void main(String[] test) {
     
    	     final ServerSocket serveurSocket  ;//accepte les connexion venues des clients 
    	     final Socket clientSocket ; //permet de se connecter à la machine distante 
    	     final BufferedReader in; // lire le texte reçu à partir de l'emetteur 
    	     final PrintWriter out; // envoyer le texte saisi 
    	     final Scanner sc =new Scanner(System.in); // lire les entrées clavier 
     
    	     try {
    	       serveurSocket = new ServerSocket(180);
    	       clientSocket = serveurSocket.accept();
    	       out = new PrintWriter(clientSocket.getOutputStream());
    	       in = new BufferedReader (new InputStreamReader (clientSocket.getInputStream()));
    	       Thread envoi= new Thread(new Runnable() {
    	          String msg;
    	          @Override
    	          public void run() {
    	             while(true){
    	                msg = sc.nextLine();
    	                out.println(msg);
    	                out.flush();
    	             }
    	          }
    	       });
    	       envoi.start();
     
    	       Thread recevoir= new Thread(new Runnable() {
    	          String msg ;
    	          @Override
    	          public void run() {
    	             try {
    	                msg = in.readLine();
    	                //tant que le client est connecté
    	                while(msg!=null){
    	                   System.out.println("Client : "+msg);
    	                   msg = in.readLine();
    	                }
    	                //sortir de la boucle si le client a déconecté
    	                System.out.println("Client déconecté");
    	                //fermer le flux et la session socket
    	                out.close();
    	                clientSocket.close();
    	                serveurSocket.close();
    	             } catch (IOException e) {
    	                  e.printStackTrace();
    	             }
    	         }
    	      });
    	      recevoir.start();
    	      }catch (IOException e) {
    	         e.printStackTrace();
    	      }
    	   }
    	}
    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
     
    	import java.io.BufferedReader;
    	import java.io.IOException;
    	import java.io.InputStreamReader;
    	import java.io.PrintWriter;
    	import java.net.Socket;
    	import java.util.Scanner;
        import java.util.*;
     
    	public class client2 {
     
    		public static void main(String[] args) {
     
    		      final Socket clientSocket;
    		      final BufferedReader in;
    		      final PrintWriter out;
    		      final Scanner sc = new Scanner(System.in);//pour lire à partir du clavier
     
    		      try {
    		         /*
    		         * les informations du serveur ( port et adresse IP ou nom d'hote
    		         * 169.254.2.144 est l'adresse local de la machine
    		         */
    		         clientSocket = new Socket("169.254.2.44",180);
    		         //flux pour envoyer
    		         out = new PrintWriter(clientSocket.getOutputStream());
    		         //flux pour recevoir
    		         in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
     
    		         Thread envoyer = new Thread(new Runnable() {
    		             String msg ;
    		            // String msggg ; 
     
     
    	             String   msg1 = in.readLine();
     
    		              @Override
    		              public void run() {
    		                while(true){
    		                	if ( msg1.equals("bonjour"))
    		                	{
    		                		msg.equals( " cv bien et toi") ; 
    				                //  out.println("client : cv bien et toi ! "); 
     
    		                	 }
    		                	else 
    		                	{ msg.equals( "merci") ;  }                 
    		                	//out.println("client : bonjour serveur ") ; 
    		                 msg = sc.nextLine();
    		                  out.println(msg);
    		                  out.flush();
    		                }
    		             }
    		         });
    		         envoyer.start();
     
    		        Thread recevoir = new Thread(new Runnable() {
    		            String msg;
    		            @Override
    		            public void run() {
    		               try {
    		                 msg = in.readLine();
    		                 while(msg!=null){
    		                    System.out.println("Serveur : "+msg);
    		                    msg = in.readLine();
    		                 }
    		                 System.out.println("Serveur déconecté");
    		                 out.close();
    		                 clientSocket.close();
    		               } catch (IOException e) {
    		                   e.printStackTrace();
    		               }
    		            }
    		        });
    		        recevoir.start();
     
    		      } catch (IOException e) {
    		           e.printStackTrace();
    		      }
    		  }
    		}
    merci infiniment d'avance ))

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Pour permettre à plusieurs clients de se connecter à ton serveur, il faut que tu prévois de pouvoir "accepter" plusieurs clients. Donc il ne faut mettre un simple socket.accept() unique dans le thread principal et le traiter et ensuite ne plus rien faire. Le serveur doit pour chaque retour d'accept() créé un nouveau client, dans un nouveau thread (on pourrait le faire dans le thread principal, mais ça voudrait dire que chaque client est traité l'un après l'autre, dans ton cas, client et requête étant la même chose).
    Donc avec peu de modification de ton code, ça constituerait à prendre tout le code qu'il y a après clientSocket = serveurSocket.accept();, à le mettre dans un thread à part, donc à faire quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     new ClientThread(clientSocket).start();
    avec une classe ClientThread extends Thread (ou: new Thread(new ClientRuntime(clientSocket)).start(); avec ClientRuntime qui implemente Runtime, ou encore utiliser un ExecutorService, de type newFixedThreadPool, le nombre de threads étant le nombre de clients traités simultanément, où plûtôt le nombre de requête traitées simultanément)
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Autre

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2014
    Messages : 14
    Points : 14
    Points
    14
    Par défaut
    Merci beaucoup joel , je veux essayer et j'éspère que ça marche

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/12/2013, 10h08
  2. Comment écouter un port série avec flash ?
    Par Alex01 dans le forum Flash
    Réponses: 11
    Dernier message: 07/10/2005, 16h11
  3. comment detecter un serveur interbase???
    Par delphien dans le forum Bases de données
    Réponses: 2
    Dernier message: 12/04/2004, 17h35
  4. [VB6] Comment lister les serveurs SQL d'un domaine ?
    Par WOLO Laurent dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 29/01/2004, 08h49

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