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 - read non bloquant alors qu'il devrait être bloquant


Sujet :

Entrée/Sortie Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 155
    Points : 45
    Points
    45
    Par défaut Socket - read non bloquant alors qu'il devrait être bloquant
    Bonjour à tous,

    j'ai un problème, j'ai un programme qui lit sur une socket et qui apparemment n'est pas bloquant puisque j'ai une boucle infinie alors qu'à un moment je n'écrit plus rien sur la socket .

    voici mon programme :
    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
    while (true){         
     
                if (! bAreWeConnected){
                    soc = s.accept();
                    in = soc.getInputStream();
     
                    //lecture du premier octet de connexion (RFC1086)
                    in.read(fonction, 0, 1);
                    logger.log(Level.INFO, "recu trame de connexion RFC1086 (1er octet) : " + HexaTools.getHexString(fonction));
     
                    //lecture de la trame de connexion (RFC1086) 48 octets
                    in.read(trameRFC1086, 0, 48);
                    logger.log(Level.INFO, "recu trame de connexion RFC1086 (suite) : " + HexaTools.getHexString(trameRFC1086));
     
                    bAreWeConnected = true;
                }
     
                //lecture de la couche RFC1006 : 4 octets
                in.read(coucheRFC1006, 0, 4);
                logger.log(Level.INFO, "recu couche RFC1006 : " + HexaTools.getHexString(coucheRFC1006));
     
     
                int nb = coucheRFC1006[3] & 0xFF;
                nb += (coucheRFC1006[2] & 0xFF) * 256;
     
                message = new byte[nb - 4];
                in.read(message, 0, nb - 4);    //4 octets pour la couche RFC1006, à ne pas lire
                logger.log(Level.INFO, "recu coucheTransport +  messageApplicatif: " + HexaTools.getHexString(message));
     
     
                //on récupère l'identifiant du message reçu
                String sIdentifiantMessage = new String(message, 6, 4);
                logger.log(Level.INFO, "identifiant message recu : " + sIdentifiantMessage);
     
                FileInputStream     inCB, inTPE;
                Properties          propCB, propTPE;
                OutputStream        out = new DataOutputStream(soc.getOutputStream());
     
                propCB      = new Properties();
                propTPE     = new Properties();
     
                try {
                    inCB = new FileInputStream("/data/conf/SimulateurTPE_CB.conf");
                    propCB.load(inCB);
                    inCB.close();
     
                    inTPE = new FileInputStream("/data/conf/SimulateurTPE_TPE.conf");
                    propTPE.load(inTPE);
                    inTPE.close();
                } catch (FileNotFoundException ex) {
                    logger.log(Level.ERROR, ex);
                }
                catch (IOException ex) {
                    logger.log(Level.ERROR, ex);
                }
     
                if (sIdentifiantMessage.equals("1101")){                
                    MessageApplicatif1102 message1102 = formerMessage1102(propCB, propTPE);
                    message1102.envoyerAuServeur(false, out);
                }
     
                //in.close();
                //soc.close();
            }
    sur internet il est écrit partout que les read sont bloquants or les miens ne semblent pas bloquants et je ne comprend pas pourquoi. si qu'elqu'un a une idée, merci par avance

    a+

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 155
    Points : 45
    Points
    45
    Par défaut
    Bon j'ai trouvé ma réponse toute seule
    Le programme qui écrivait sur la socket faisait un close sur la socket à un moment donné, c'est pourquoi le programme qui lisait sur la socket renvoyait -1 à chaque read et n'était donc plus bloquant...

    post résolu

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 20/11/2014, 18h44
  2. Socket lecture non bloquante
    Par Darkthur dans le forum Multithreading
    Réponses: 2
    Dernier message: 22/05/2009, 18h28
  3. Read non bloquant, repérer saisie backspace
    Par firemax dans le forum C
    Réponses: 7
    Dernier message: 18/05/2008, 10h00
  4. Réponses: 6
    Dernier message: 20/07/2007, 13h16
  5. Réponses: 17
    Dernier message: 17/11/2006, 11h00

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