0) NON SERVE RI-QUOTARE tutto il messaggio precedente!
AL limite quoti la frase per fare il punto, altrimenti NON SERVE: il messaggio e' gia' li e lo puo' leggere chiunque!
Quasi esattamente.
"Quasi" perche', in generale, chi riceve la struttura dati SA GIA' che cosa sta' ricevendo, ma non necessariamente i dettagli piu' spiccioli (che COMUNQUE SONO STRA-NECESSARI per ricostruire ESATTAMENTE la struttura dati).
Se devi inviare 60 caratteri, chi riceve SA che ricevera' dei caratteri ma NON NECESSARIAMENTE che saranno 60
Se devi inviare una matrice 20x20, chi riceve SA che deve ricevere una matrice ma NON NECESSARIAMENTE che debba essere PROPRIO 20x20.
Puoi immagnare almeno 3 livelli di "astrazione":
1) chi riceve SA ESATTAMENTE che cosa deve ricevere, fin nei minimi dettagli (ESATTAMENTE la matrice 20x20, ESATTAMENTE 60 caratteri)
2) chi riceve SA che cosa deve ricevere, MA NON i dettagli spiccioli (SA che riceve una matrice ma non le dimensioni, SA che riceve una sequenza di caratteri ma non il numeroi)
3) chi riceve NON HA IDEA di che cosa ricevera', quindi, quando si invia qualcosa si deve descrivere NEL DETTAGLIO che cosa si sta' inviando: il tipo di struttura dati, il tipo di dato, il valore, ...
Di volta in volta si scegliera' uno dei possibili approcci.
Nel 90% dei casi ci si trova nella situazione 2 (sufficientemente flessibile e sufficientemente efficiente perche' non serve inviare troppe informazioni aggiuntive)
Praticamente MAI ci si trova nella situazione 1, perche' la 2 puo' essere usata anche per la 1 con un microscopico overhead.
Raramente ci si trova nella situazione 3. Raramente NON VUOL DIRE MAI!
Quello che si fa e':
1) inviare un'INTESTAZIONE con le informaazioni sulle DIMENSIONI della struttura dati (e magari un numero di versione, ma questa e' un'altra storia)
2) inviare i dati
3) inviare un TERMINATORE che contiene, tra l'altro, una FIRMA di qualche genere che dipende dai dati inviati
Chi riceve
1) riceve l'INTESTAZIONE da cui estrae la DIMENSIONE della struttura dati e la usa per creare, IN LOCALE, una struttura dati VUOTA ma con le stesse dimensioni
2) riceve i DATI che usa per popolare la struttura dati
3) riceve il TERMINATORE con la firma, calcola la firma sui dati ricevuti e CONTROLLA se le due firme sono uguali
Il passo 3 e' NECESSARIO per ASSICURARSI di aver ricevuto TUTTO NEL MODO ESATTO: se le due FIRME sono diverse, c'e' qualcosa che non va!
Dove sia il problema e', OVVIAMENTE, una questione che andra' analizzata: puo' essere a livello di invio O di ricezione OPPURE nel canale di trasmissione!