16.06.2013 Views

2 - Amiga Magazine Online

2 - Amiga Magazine Online

2 - Amiga Magazine Online

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

sull'indirizzo del mittente. Trattandosi di una modifica fa-<br />

cilmente implementabile, viene lasciata come esercizio al<br />

lettore.<br />

In teoria si potrebbe usare connect( ) anche in questo ca-<br />

so. Ciò innanzitutto fa sì che lo stack associ al socket an-<br />

che l'indirizzo e la porta di destinazione, rendendo quindi<br />

possibile l'uso di send( ) e recv( ). Non solo: diventa suo<br />

compito filtrare pacchetti da indirizzi e porte indesiderate.<br />

I1 grande svantaggio, però, è legato alla natura stessa di<br />

UDP. Inviando per esempio dati ad un indirizzo non esi-<br />

stente o a una porta non allocata da nessuno, send( ) ri-<br />

tornerà immediatamente lo stesso, non essendo contem-<br />

plato da UDP alcun controllo sull'arrivo dei dati. Lo stack<br />

ricevente, però, riconoscerà il pacchetto come avente de-<br />

stinazione invalida e invierà un messaggio di errore ICMP<br />

di basso livello allo stack mittente.<br />

Quest'ultimo, grazie alla chiamata fatta a connect( ), sa<br />

qual è il socket responsabile e notificherà l'errore alla pri-<br />

ma chiamata di funzione relativa a quel socket successiva<br />

all'am'vo dell'errore ICMP. Il che vuol dire che in teoria<br />

l'errore potrebbe essere generato anche dopo due o tre<br />

chiamate di rete. Per non complicare le cose e per evitare<br />

di fare troppe assunzioni sugli effetti collaterali di certi<br />

meccanismi TCPiIP, quindi, si è preferito non usare con-<br />

nect( ).<br />

Tra le chiamate a sendto( ) e recvfrom( ) è stato inserito<br />

un ritardo, il cui valore può essere specificato da riga<br />

comandi, che simula altre attività dell'applicazione (ela-<br />

borazione dei dati, aggiornamento video, etc.). Le altre<br />

righe di codice si occupano di stampare un messaggio<br />

per ogni blocco di dati ricevuto e per ogni chiamata di<br />

recvfrom( ) che non abbia restituito dati. E' possibile<br />

provare con AmiTCP il programma usando lo script lo-<br />

calnet descritto nel n. 80 di <strong>Amiga</strong> <strong>Magazine</strong>, senza bi-<br />

sogno di collegarsi al proprio provider. Con Miami, in-<br />

vece, basta caricare il programma senza andare in linea.<br />

In due Shell distinte si lancerà il comando seguendo la<br />

sintassi<br />

UDPTest Host/A, Port/N, LocalPort/N, Delay/N<br />

Per esempio:<br />

Shell.l> UDPTest 127.0.0.1 4000 4001 20<br />

She11.22 UDPTest 127.0.0.1 4001 4000 20<br />

L'indirizzo 127.0.0.1, noto anche come localbost, corri-<br />

sponde sempre al proprio <strong>Amiga</strong>. Si possono simulare<br />

problemi di carico della rete interrompendo con Ctrl-C<br />

una delle diie copie e rilanciandola dopo pochi secondi,<br />

oppure specificando per le due copie ritardi diversi me-<br />

diante il parametro Delay.<br />

[...l<br />

Byte letti: 200<br />

Byte letti: 200<br />

Non ricevo più dati ...<br />

Byte letti: 200<br />

Non ricevo più dati ........<br />

Byte letti: 200<br />

[...l<br />

I1 programma presentato è alquanto primitivo. Per esem-<br />

pio, non è previsto alcun meccanismo per eventuali pac-<br />

chetti "chiave" che debbano essere recapitati a tutti i co-<br />

sti. Un approccio primitivo potrebbe essere quello di in-<br />

viarne più copie a intervalli ristretti di tempo per avere<br />

più probabilità che essi arrivino a destinazione. Tecniche<br />

più sofisticate prevedono il ricorso a timeout e ritrasmis-<br />

sione dei pacchetti. Un buon esempio è descritto in Ua-<br />

cobsonl o nella sezione 8.4 di [Stevensl. Tali pacchetti<br />

chiave potrebbero essere marcati come speciali da un ap-<br />

posito flag che, se impostato indica all'altro lato di resti-<br />

tuire un pacchetto di conferma.<br />

In luogo della singola chiamata di recvfrom( ), infine, per<br />

applicazioni come il gioco descritto sopra sarebbe preferi-<br />

bile usare un ciclo che ignori pacchetti obsoleti e recuperi<br />

solo l'ultimo presente in coda.<br />

Il futuro: MBone e RTP<br />

A partire dal 1992 è stata attivata MBone, abbreviazione<br />

di IP Multicast Backbone, una rete virtuale per applicazio-<br />

ni realtime. Si tratta di una serie di computer e worksta-<br />

tion visibili anche come "normali" host Internet, ma che<br />

hanno un secondo indirizzo nell'intervallo 224.0.0.0 -<br />

239.25 5.2 5 5.255 (la cosiddetta clsse D) e comunicano tra<br />

loro con collegamenti che assicurano trasferimenti ad alta<br />

velocità. Essa sfrutta il concetto di comunicazione UDP<br />

multicast, ossia rivolta a più interlocutori: uno-a-molti, al-<br />

cuni-a-molti, molti-a-molti. Nel 1996 è stato introdotto un<br />

protocollo, RTP, che cerca di aumentare l'affidabilità delle<br />

comunicazioni introducendo ritrasmissioni occasionali,<br />

adattandosi ai ritardi e alla banda disponibile, senza però<br />

il carico eccessivo di un responso per ogni dato inviato.<br />

Una applicazione tipica è quella delle conferenze<br />

videoiaudio, offerte dagli host nell'intervallo 224.2.*.*: più<br />

o meno come in TV, una organizzazione o una società ri-<br />

chiede l'uso per un determinato numero di minuti o ore<br />

di un "canale" MBone, per la trasmissione di filmati, inter-<br />

viste e manifestazioni. Tra gli eventi più gettonati, già pri-<br />

ma della Marte-mania, le tante trasmissioni NASA con do-<br />

cumentari, reportage e persino interviste con astronauti in<br />

orbita(!).<br />

Un esempio di output è il seguente: (segue a pag.50)

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!