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

Langage Java Discussion :

Besoin d'aide (Socket/Serveur)


Sujet :

Langage Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Besoin d'aide (Socket/Serveur)
    Bonjour à tous,

    voilà j'aimerais créer une application de type "Serveur", qui ouvre 2 ports et qui attend une connexion sur chacun d'eux. Donc je crée une classe Serveur que voici :

    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
    import java.io.*;
    import java.net.*;
     
    public class Serveur {
     
       public Serveur(int port) throws Exception{
            ServerSocket s = new ServerSocket(port);
            Socket soc = s.accept();
     
            // Un BufferedReader permet de lire par ligne.
            BufferedReader plec = new BufferedReader(
                                   new InputStreamReader(soc.getInputStream())
                                  );
     
            // Un PrintWriter possède toutes les opérations print classiques.
            // En mode auto-flush, le tampon est vidé (flush) à l'appel de println.
            PrintWriter pred = new PrintWriter(
                                 new BufferedWriter(
                                    new OutputStreamWriter(soc.getOutputStream())), 
                                 true);
     
            while (true) {
               String str = plec.readLine();          // lecture du message
               if (str.equals("END")) break;
               System.out.println("ECHO = " + str);   // trace locale
               pred.println(str);                     // renvoi d'un écho
            }
     
            plec.close();
            pred.close();
            soc.close();
       }
    }
    Le constructeur reçois le numéro de port a mettre en écoute. Je crée donc 2 objets Serveur avec le main :

    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
    public class main {
     
    	public static Serveur serv1 = null;
    	public static Serveur serv2 = null;
     
    	public static void main(String[] args) {
    		try {
    			serv1 = new Serveur(8080);
    			serv2 = new Serveur(9090);
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
     
    	}
     
    }
    Le probléme est que mon client arrive bien a se connecter au premier port (8080), il recoit et envoie bien les données mais il n'arrive pas à se connecter au deuxiéme port (9090), on dirait qu'il peut s'y connecter mais aucune données transite.

    Voici le code de mon client :

    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
    import java.io.*;
    import java.net.*;
     
     
    public class Client {
       static final int port = 9090;
     
       public static void main(String[] args) throws Exception {
            Socket socket = new Socket("localhost", port);
            System.out.println("SOCKET = " + socket);
     
            BufferedReader plec = new BufferedReader(
                                   new InputStreamReader(socket.getInputStream())
                                   );
     
            PrintWriter pred = new PrintWriter(
                                 new BufferedWriter(
                                    new OutputStreamWriter(socket.getOutputStream())),
                                 true);
     
            String str = "bonjour";
            for (int i = 0; i < 10; i++) {
               pred.println(str);          // envoi d'un message
               str = plec.readLine();      // lecture de l'écho
            }
            System.out.println("END");     // message de terminaison
            pred.println("END") ;
            plec.close();
            pred.close();
            socket.close();
       }
    }
    Voilà, si quelqu'un aurait d'où le problème peut venir ce serait super .
    Merci d'avance.

    ++

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Points : 635
    Points
    635
    Par défaut
    dans ta classe main tu crées le premier serveur, celui ci accepte un client puis boucle pour écouter ce qui est envoyé. Le problème est que la boucle ne finit pas et on n'arrive jamais au moment où le 2e serveur est créé. Pour résoudre le problème tu peux créer un thread par serveur.

  3. #3
    Membre expérimenté
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 013
    Points : 1 381
    Points
    1 381
    Par défaut
    La solution c'est de démarrer un Thread dans ta classe serveur dans lequel tu écouteras les connexions entrantes. Ensuite ta classe exécutante pourra reprendre la main.
    De plus, tu peux tester si la communication se fait avec un telnet localhost ton_port.

  4. #4
    Futur Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    merci pour ta réponse très rapide

    Tu avais raison, avec les thread tout marche impec'.

    Merci encore.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Important : Besoin d'aide, client serveur
    Par dridriun dans le forum Windows
    Réponses: 0
    Dernier message: 01/04/2014, 19h03
  2. besoin d'aide Windows serveur
    Par CLion dans le forum Administration
    Réponses: 3
    Dernier message: 03/09/2010, 10h19
  3. Réponses: 4
    Dernier message: 17/10/2006, 15h42
  4. [Serveur] Besoin d'aide pour configuration
    Par rigel dans le forum Ordinateurs
    Réponses: 8
    Dernier message: 19/09/2006, 10h29
  5. Besoin d'aide sur les sockets
    Par cryptorchild dans le forum Programmation et administration système
    Réponses: 1
    Dernier message: 03/04/2006, 17h27

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