Bonjour,

J'ai un serveur qui crée un thread aussitôt qu'il y a un client connecte, j’ai ajouté un TimeOut sur le socket pour débloquer la fonction read(buf,0 BUFFER.SIZE).

L’opération read se fait comme il faut et j'arrive à traiter la requête du client. Quand le socket atteint le TimeOut de la socket, IOEXCEPTION est capture au lieu de SocketTimeOut.

voilà un extrait du 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
public static void main(String[] args)
 
{
    try {
 
        InetAddress address = InetAddress.getLocalHost();
        int port = 10555;
 
        ServerSocket ss = new ServerSocket(port, 16, address);
        while (true) {
            Socket s = ss.accept();
            s.setSoTimeout(2000);
            System.out
                    .println("--------------------------------------------------------------------------------");
            System.out.println("Accepted " + s);
            ServerThread t = new ServerThread(s);
            t.start();
        }
catch (IOException e)
{
    System.out.println("cought exception " );
}
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
 
static class ServerThread extends Thread { private final Socket s;
 
ServerThread(Socket s)
{
    this.s = s;
}
 
public void run()
{       
        int read = -1;
        try {
 
        byte[] buf = new byte[8192];       
        read = inputstream.read(buf, 0, 8192);
        }catch (SocketTimeoutException e) {
            System.out.println("time out  excception");
        }
        catch (InterruptedIOException e) {
            System.out.println("time out  excception");
        }
        catch (IOException e) {
            System.out.println("io excception");
        } 
        catch (Exception e) {
            System.out.println("generic excception");
        }
        if (read == -1) {
            // socket was been closed
 
            System.out.println("socket closed");
        }
        finally
        {
        s.close();
        }           
    }
 
}

Question 1 : pourquoi IOEXCEPTION est soulevé

QUESTION 2 : je sais qu'après le time out le socket reste valide, comment je pourrais le réutiliser ?


Merci a l'avance