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+