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 :

Problème server - server socket


Sujet :

Entrée/Sortie Java

  1. #1
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 98
    Points : 65
    Points
    65
    Par défaut Problème server - server socket
    Bonjour,

    je dois développer une application genre msn qui permettra de communiquer entre deux ordinateurs.
    J'ai codé une partie socket (client) et une partie serverSocket (serveur).

    Mon problème avec mon code, c'est que j'attends l'envoi d'un msg du 2ème PC, je le reçois ca c'est bon. J'arrive à envoyer un msg moi aussi, mais lorsque j'envoi ce message je n'arrive pas a relancer ma fonction d'attente reception.

    Voici mon code :
    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
    82
    83
    84
    85
     
    private void Ecoute()
         {
          try {       
          oreille=new ServerSocket (1234);
          System.out.println("creation");
     
          while (connection=true)
           {
            Socket client=oreille.accept();
            // mise en attente d'une connexion
            InputStream entrée=client.getInputStream();
            OutputStream sortie=client.getOutputStream();
            //lecture d'un entier
            //int iClient=entrée.read();
            //envoie d'un octet
            //sortie.write(13);
            //lecture d'une chaine
            DataInputStream dataentrée=new DataInputStream(entrée);
            String chaineClient=dataentrée.readLine();
            //Scanner sc = new Scanner(System.in);
            System.out.print(chaineClient);
            //écriture d'une chaine
            //PrintStream printsortie=new PrintStream (sortie);
            //printsortie.write("la chaine que j'envoie au client");
            client.close();
            connection = false;
           }
          oreille.close();
          } 
         catch (IOException e) {
         // TODO Auto-generated catch block
          System.out.println("pas de connexion");}
         }
     
         //-------------------------------------------------------------
      //   GESTION DES INTERACTIONS
      //------------------------------------------------------------- 
         class boutonEnvoyerListener implements ActionListener
         {
         private String AdresseIP;
         private Socket s;
         private OutputStream sortie;
      public void actionPerformed(ActionEvent arg0)
          {
     
     
           TextBuffer += AdresseIp + " dit : " + TextIn.getText() + " \n";
     
           //TextBuffer = <html><body>Ligne 1<br />Ligne 2</body></html>;
           TextOut.setText(TextBuffer);
     
     
           TextIn.setText("");      
     
              try {
        oreille.close();
       } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
       }
       this.AdresseIP = "192.168.0.2";       
     
       try
       {
        this.s=new Socket(AdresseIP,PortCom); 
        InputStream entree= s.getInputStream();
        this.sortie= s.getOutputStream();
        //this.EnvoyerMessage();
        PrintStream PrintSortie=new PrintStream(sortie);
        PrintSortie.println("coucou");
        s.close();
       }
       catch(UnknownHostException e)
       {
        System.out.println("serveur introuvable");
       }
       catch(IOException e)
       {
        System.out.println("impossible de se connecter");
       }
       connection = true;
          //Ecoute();    
          }
         }
    Voila mes fonctions. La fonction Ecoute() attend un message. La fonction d'envoi ce fait lors d'un appui sur le bouton envoyer.
    Pourriez vous me dire comment une fois que mon message est envoyé comment je peux repasser sur ma fonction Ecoute automatiquement.

    Je vous joins mon projet complet en meme temps.
    Fichiers attachés Fichiers attachés

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Tu fois faire de l'asynchrone entre l'envoi et la réception. Lorsque le ServerSocket accepte une connexion, tu dois démarrer un nouveau Thread pour gérer les envoi/réception de chaque client. La boucle "while" sera à placer dans le Thread client.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 98
    Points : 65
    Points
    65
    Par défaut
    Merci pour ta réponse, mais pour être sincère je débute en java et j'ai du mal à mettre en oeuvre ta réponse.

    J'ai vu des exemples de code avec des threads pr les fonctions serverSocket mais je ne suis pas arrivé à la mettre en oeuvre.

    Pourrais tu me faire une esquisse de code avec tes explications

  4. #4
    Membre émérite
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Points : 2 424
    Points
    2 424
    Par défaut
    salut

    Vous avez deux fonctions qui vont remplir votre client

    reception et envoi

    pour l'envoi il n'y a pas de probleme parce que c'est ce qui va faire l'envoi
    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    //le prosedure de envoyer ta chaine(se tu veu envoye) 
     
    sortie.println(str);
    et pour ta fonction qui fait la reception, elle doit etre lancee lorsque la connexion est acceptee avec un thread
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       String chaineClient=dataentrée.readLine();
            //Scanner sc = new Scanner(System.in);
            System.out.print(chaineClient);
    la solution c'est de cree une class qui fait la reception et une class qui fait l'envoi
    class de reception

    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
     
    public class ThreadReception extends Thread {
      Private InputStream entrée;
    DataInputStream dataentrée;
    public ThreadReception(InputStream IN)//constructeur de la class
    {
    entrée=IN;
    dataentrée==new DataInputStream(entrée);
     
    }
     
    public void run()//la fct  qui s'excute lors appel le thead 
     {
        // faire la reception 
       try 
       {
            String chaineClient=dataentrée.readLine();
            System.out.print("Client :" + chaineClient);
       }
         catch(Exception f)
       {
          System.out.println("probleme de connexion :" + f.getMessage());
        }
      }
     
    }
    et la class d'envoi qui est votre class avec une petite modification


    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
     
    private void Ecoute()
         {
          try {       
          oreille=new ServerSocket (1234);
          System.out.println("creation");
     
     
            Socket client=oreille.accept();
            // mise en attente d'une connexion
            InputStream entrée=client.getInputStream();
            OutputStream sortie=client.getOutputStream();
    //Lancement de reception       
    ThreadReception reception=new ThreadReception(entrée);
    reception.start();//l'excution de la thread (la fct run )
     
           }
          oreille.close();
          } 
         catch (IOException e) {
         // TODO Auto-generated catch block
          System.out.println("pas de connexion");}
         }
     
         //-------------------------------------------------------------
      //   GESTION DES INTERACTIONS
      //------------------------------------------------------------- 
         class boutonEnvoyerListener implements ActionListener
         {
         private String AdresseIP;
         private Socket s;
         private OutputStream sortie;
      public void actionPerformed(ActionEvent arg0)
          {
     
     
           TextBuffer += AdresseIp + " dit : " + TextIn.getText() + " \n";
     
           //TextBuffer = <html><body>Ligne 1<br />Ligne 2</body></html>;
           TextOut.setText(TextBuffer);
     
     
           TextIn.setText("");      
     
              try {
        oreille.close();
       } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
       }
       this.AdresseIP = "192.168.0.2";       
     
       try
       {
        this.s=new Socket(AdresseIP,PortCom); 
        InputStream entree= s.getInputStream();
        this.sortie= s.getOutputStream();
        //this.EnvoyerMessage();
        PrintStream PrintSortie=new PrintStream(sortie);
        PrintSortie.println("coucou");
        s.close();
       }
       catch(UnknownHostException e)
       {
        System.out.println("serveur introuvable");
       }
       catch(IOException e)
       {
        System.out.println("impossible de se connecter");
       }
       connection = true;
          //Ecoute();    
          }
         }

Discussions similaires

  1. Problème de communication socket (Client->Server)
    Par Julien_C++ dans le forum C++Builder
    Réponses: 6
    Dernier message: 21/05/2007, 21h28
  2. tskill-problème terminal server
    Par mathieu_r dans le forum Windows Serveur
    Réponses: 2
    Dernier message: 12/06/2006, 15h27
  3. Can't connect to local MySQL server through socket
    Par PamelaGeek dans le forum Réseau
    Réponses: 1
    Dernier message: 15/05/2006, 17h16
  4. PB : Can't connect to local MySQL server through socket
    Par nownow dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 30/05/2005, 09h35
  5. Problème HTTP SERVER
    Par meufeu dans le forum Oracle
    Réponses: 11
    Dernier message: 16/04/2004, 14h21

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