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 Client-Server ; Le client ne reçoit rien


Sujet :

Entrée/Sortie Java

  1. #1
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut Socket Client-Server ; Le client ne reçoit rien
    Bonjour à tous,
    Je suis encore novice au niveau de Socket JAVA, et j'ai décidé d'en apprendre plus mais je rencontre un problème.

    J'ai repris le code du serveur ici
    Et j'ai créé un client moi même.
    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
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    import java.awt.BorderLayout;
    import java.awt.event.*;
    import java.io.*;
    import java.net.*;
    import java.util.logging.*;
    import javax.swing.*;
     
    public class Client extends JPanel implements ActionListener, Runnable{
       static final int port = 18000;
       JTextArea area;
       JTextField message;
       JButton envoyer;
       Socket socket;
       BufferedReader plec;
       PrintWriter pred;
     
       /**
        * Constructeur
        */
       public Client(){
     
           /***** Création de l'interface graphique ****/
            JFrame fenetre = new JFrame("Ma Fenêtre");
            fenetre.setSize(200,200);
            fenetre.setResizable(true);
            fenetre.setLocationRelativeTo(null);
            fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
            area = new JTextArea();
            message = new JTextField();
            envoyer = new JButton("Envoyer");
            envoyer.addActionListener(this);
     
            this.setLayout(new BorderLayout());
            this.add(area,BorderLayout.CENTER);
     
            JPanel pane = new JPanel(new BorderLayout());
            pane.add(message,BorderLayout.CENTER);
            pane.add(envoyer,BorderLayout.EAST);
            this.add(pane,BorderLayout.SOUTH);
     
            fenetre.setContentPane(this);
            fenetre.setVisible(true);
            /**** Fin création de l'interface graphique ***/
     
     
            this.gestionSocket();
     
            new Thread(this).start();
       }
     
       /**
        * Connection au server et initialisation des flux
        */
        private void gestionSocket() {
                try {
                    socket = new Socket("127.0.0.1", port);
                    System.out.println("SOCKET = " + socket);
                    plec = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                    pred = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
     
                 } catch (UnknownHostException ex) {
                    Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
                } catch (IOException ex) {
                    Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
                }
       }
     
     
     
       /**
        * Envoie d'un message
        * Gestion de l'appuie sur le boutton envoyé
        * @param e : évènement
        */
        public void actionPerformed(ActionEvent e) {
            if(e.getActionCommand().equals("Envoyer")){
                String msg = message.getText();
                if(msg!=null && !msg.equals(""));                
                    pred.println(message.getText());
                    message.setText("");
            }
        }
     
     
     
        /**
         * Lanceur
         * @param args
         * @throws Exception
         */
       public static void main(String[] args) throws Exception {
           new Client();
     
       }
     
       /**
        * Ecoute des flux entrant ( message envoyés par le sever
        */
        public void run() {
     
            while(true){
                try {              
                    System.out.println("attend msg");
     
                    /*********** PROBLEME *************/
                    String msg = plec.readLine();//Problème ici, le client ne reçoit rien en flux d'entrée
                    /************* FIN PROBLEME ***************/
     
                    System.out.println("reçu");
                    if(msg != null && !msg.equals("")){
                        area.setText(area.getText()+msg+"\n");
                    }
                } catch (IOException ex) {
                    System.out.println("problème réception : "+ex.getMessage());
                }
            }
        }
    }
    Comme indiqué dans les commentaire de mon code, String msg = plec.readLine(); ne reçoit jamais rien. Alors que le serveur envoie bien un flux de sortie vers le Client.

    Où est mon erreur ?

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par Ivelios Voir le message
    Comme indiqué dans les commentaire de mon code, String msg = plec.readLine(); ne reçoit jamais rien. Alors que le serveur envoie bien un flux de sortie vers le Client.
    Faudrait voir le code d'envoi du serveur. Aussi, sur ton bufferedWriter, n'oublie pas de faire un flush() pour etre sur que tout est envoyé au serveur après avoir envoyé une commande, sinon ca peut rester en attente indéfiniment dans le buffer de sortie.

  3. #3
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    J'ai rajouté un flush() au niveau du PrintWriter du client.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    pred.println(message.getText());
    message.setText("");
    pred.flush();
    Et pour l'envoi du message par le 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
    16
    17
    18
    19
    20
    21
    //** Methode : envoie le message à tous les clients **
      synchronized public void sendAll(String message,String sLast)
      {
        PrintWriter out; // declaration d'une variable permettant l'envoi de texte vers le client
     
        for (int i = 0; i < _tabClients.size(); i++) // parcours de la table des connectés
        {
          out = (PrintWriter) _tabClients.elementAt(i); // extraction de l'élément courant (type PrintWriter)
          if (out != null) // sécurité, l'élément ne doit pas être vide
          {
          	// ecriture du texte passé en paramètre (et concaténation d'une string de fin de chaine si besoin)
     
              //********* M'indique bien le Message que le client a envoyé ******//
              System.out.println(message);
              //*****************************************************************//
     
            out.print(message+sLast);
            out.flush(); // envoi dans le flux de sortie
          }
        }
      }
    source ici

    Je comprend pas... Pourtant tout a l'air correct

  4. #4
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    C'est bon, j'ai trouvé...
    Le problème n'était pas au niveau du programme mais du pare-feu
    J'ai mis une exception sur le port 18000 et le tour est joué

    ps : merci tchize

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

Discussions similaires

  1. Client/Server Socket ..
    Par Chyokyka dans le forum Débuter
    Réponses: 8
    Dernier message: 15/04/2008, 21h50
  2. client/server tcp, probleme socket
    Par Misaki dans le forum Programmation et administration système
    Réponses: 1
    Dernier message: 20/12/2007, 09h46
  3. Problème de communication socket (Client->Server)
    Par Julien_C++ dans le forum C++Builder
    Réponses: 6
    Dernier message: 21/05/2007, 21h28
  4. [SQL Server 2005][Client] utilitaire réseau client
    Par gunico dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 20/03/2006, 09h29
  5. [Socket][Client/Server]Exception d'origine inconnue
    Par willowII dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 03/11/2005, 22h36

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