Iniziato capitolo sul server echo, modificato Makefile secondo i suggerimenti
[gapil.git] / simpltcp.tex
1 \chapter{Un esempio completo di client/server TCP}
2 \label{cha:simple_TCP_sock}
3
4 In questo capitolo riprenderemo le funzioni trattate nel precedente, usandole
5 per scrivere una prima applicazione client/server che usi i socket TCP per una
6 comunicazione in entrambe le direzioni. 
7
8 L'applicazione sarà una implementazione elementare, ma completa, del servizio
9 \texttt{echo}. Si è scelto di usare questo servizio, seguendo lo Stevens, in
10 quanto esso costituisce il prototipo ideale di una generica applicazione di
11 rete; pertanto attraverso questo esempio potremo illustrare i fondamenti con i
12 quali si può costruire una qualunque applicazione di rete. 
13
14 Inoltre prenderemo in esame, oltre al comportamento in condizioni normali,
15 anche tutti i possibili scenari particolari (errori, sconnessione della rete,
16 crash del client o del server durante la connessione) che possono avere luogo
17 durante l'impiego di una applicazione di rete.
18
19
20 \section{Il servizio \texttt{echo}}
21 \label{sec:TCPsimp_echo}
22
23 Il servizio \texttt{echo} è uno dei servizi standard solitamente provvisti
24 direttamente dal superserver \texttt{inetd}, definito dall'RFC~862. Come dice
25 il nome il servizio deve semplicemente rimandare indietro i dati che gli
26 vengono inviati; l'RFC specifica che per il TCP una volta stabilita la
27 connessione ogni dato in ingresso deve essere rimandato in uscita, fintanto
28 che il chiamante non ha chiude la connessione; il servizio opera sulla porta
29 TCP numero 7.
30
31 Nel nostro caso l'esempio sarà strutturato scrivendo un client che legge una
32 linea dallo standard input e la scrive sul server, il server leggerà una linea
33 dalla connessione e la riscriverà all'indietro; sarà compito del client
34 leggere la risposta del server e stamparla sullo standard output.
35