Iniziato a scrivere il server echo. Aggiunti un po' di placeholder per
[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 Inoltre prenderemo in esame, oltre al comportamento in condizioni normali,
9 anche tutti i possibili scenari particolari (errori, sconnessione della rete,
10 crash del client o del server durante la connessione) che possono avere luogo
11 durante l'impiego di una applicazione di rete.
12
13
14 \section{Il servizio \texttt{echo}}
15 \label{sec:TCPsimp_echo}
16
17 L'applicazione scelta come esempio sarà una implementazione elementare, ma
18 completa, del servizio \texttt{echo}. Il servizio \texttt{echo} è uno dei
19 servizi standard solitamente provvisti direttamente dal superserver
20 \texttt{inetd}, ed è definito dall'RFC~862. Come dice il nome il servizio deve
21 rimandare indietro sulla connessione i dati che gli vengono inviati; l'RFC
22 descrive le specifiche sia per TCP che UDP, e per il primo stabilisce che una
23 volta stabilita la connessione ogni dato in ingresso deve essere rimandato in
24 uscita, fintanto che il chiamante non ha chiude la connessione; il servizio
25 opera sulla porta 7.
26
27 Nel nostro caso l'esempio sarà costituito da un client che legge una linea di
28 caratteri dallo standard input e la scrive sul server, il server leggerà una
29 linea dalla connessione e la riscriverà all'indietro; sarà compito del client
30 leggere la risposta del server e stamparla sullo standard output.
31
32 Si è scelto di usare questo servizio, seguendo lo Stevens, perché costituisce
33 il prototipo ideale di una generica applicazione di rete in cui un server
34 risponde alle richieste di un client; tutto quello che cambia nel caso si una
35 applicazione più complessa è la elaborazione dell'input del client da parte
36 del server nel fornire le risposte in uscita.
37
38