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
|
|
Sandro Doro (email me)