Laboratorio

Modulo 11 - Struttura e organizzazione di Internet

Esperienza sulla API sockets con il linguaggio C

Per la realizzazione di questo modulo useremo Netkit4TIC.

Tra la marea di slide sui socket abbiamo scelto una fonte italiana socket di Laboratorio di Reti tenuto da Matteo Sereno. Abbiamo realizzato la coppia client/server per il servizio daytime. I sorgenti del client e del server sono usati nella esperienza virtuale Sockets.

La rete che useremo (192.168.100.0/24) ha due nodi:

Lo script che costruisce i due host e il relativo hub:

user@realhost$ ./lab start

configura ogni nodo con il suo programma sorgente ed eseguibile. Ricordiamo che per la compilazione ad esempio di un programma di nome client.c occorre dare il comando:

root@pc1# gcc client.c -o client

dove il flag o indica al compilatore il nome da dare al programma eseguibile (che altrimenti si chiama a.out). Alternativamente si può anche dare il comando:

root@virtualHost# make client

Per sperimentare una comunicazione client/server basta dare i comandi:

root@pc2# ./server
root@pc1# ./client

Se in uno dei nodi si lancia una cattura di traffico, la richiesta del client genera la seguente (File ACP) sequenza di pacchetti.

Esperienza sulla API sockets con il linguaggio Java

Nel filesystem della macchina virtuale non è installato il jre della Sun vista la sua licenza e ci appoggiamo al compilatore gcc che nella sua variante gcj riesce a compilare anche programmi java. Per il debugging il gdb ed eventualmente il ddd completerebbero l'elenco degli strumenti a disposizione.

Per la compilazione di un programma Java, ad esempio il classico "Hello World", supponendo che sia scritto su un file Hello.java e che quindi sia definita una classe Hello con un metodo main all'interno, il comando è il seguente:

root@virtualHost# gcj --main=Hello Hello.java -o Hello

In modo assolutamente diverso dalla versione Sun, viene prodotto un eseguibile:

root@virtualHost# file Hello
Hello: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV),
 for GNU/Linux 2.2.0, dynamically linked (uses shared libs), not stripped

Nella home directory dell'utente root si possono trovare alcuni esempi di applicazioni Java per networking. Ad esempio possiamo provare l'esempio del server http la cui spiegazione si può leggere in A Web Server in 150 Lines. Compiliamo ed eseguiamo sul nodo pc2 designato come server:

root@pc2# gcj --main=FileServer FileServer.java -o FileServer
root@pc2# ./FileServer 2000 .
FileServer accepting connections on port 2000

e ora ci connettiamo dal nodo client pc1:

root@pc1# telnet 192.168.3.2 2000
Connected to 192.168.100.2 (192.168.100.2).
Escape character is '^]'.
GET /FileServer.java HTTP/1.0
[...]
[...]
Connection closed by foreign host.

Lo stesso risultato lo possiamo ottenere con il comando:

root@pc1# wget http://192.168.100.2:2000/FileServer.java

Creative Commons License FREE THE MOUSE Valid HTML! Sandro Doro (email me)
Ultima modifica: $Date: 2005-01-21 09:15:59 $