Lezione 7 – Socket Java
Sistemi di elaborazione dell’informazione
Modulo 4 - Tecniche di programmazione distribuita
Unità didattica 1 - Socket library
Ernesto Damiani
Altre funzioni utili
• bzero(char* c, int n)
Numero di byte nulli che iniziano in c.
• gethostname(char *name, int len)
Trova il nome dell’host corrente.
• gethostbyaddr(char *addr, int len, int type)
Converte il nome di host IP in struttura contenente un
numero intero lungo.
• inet_addr(const char *cp)
Converte
stringhe di caratteri decimali puntati in interi lunghi.
• inet_ntoa(const struct in_addr in)
Converte long in notazione decimale puntata.
Porte libere
• Talvolta se accade un’uscita “rude” da un
programma (Ctrl-c), il sistema operativo non
libera immediatamente la porta.
• Alla fine, dopo alcuni minuti, la porta verrà
liberata.
• Per ridurre le probabilità che si verifichi
questo problema, bisogna inserire il
seguente codice:
– #include <signal.h>
– void cleanExit(){exit(0);}
– nel codice che usa il socket:
 signal(SIGTERM, cleanExit);
 signal(SIGINT, cleanExit);
Socket Java
Il pacchetto .net di Java fornisce due classi:
• Socket: per implementare un client;
• ServerSocket: per implementare un server.
Implementazione di un server
(1)
1. Aprire il socket server :
– ServerSocket server;
– DataOutputStream os;
– DataInputStream is;
– Server = new ServerSocket( PORT );
2. Aspettare la richiesta del client (Client Request):
– Socket client = server.accept();
3. Creare flussi I/O per comunicare con il client:
• is = new DataInputStream( client.getInputStream() );
• os = new DataOutputStream( client.getOutputStream() );
Implementazione di un server
(2)
4. Eseguire la comunicazione con il client:
–
ricevere i dati dal client: String line = is.readLine();
–
inviare i dati al client: os.writeBytes(“Hello\n”);
5. Alla fine chiudere il socket:
– client.close();
Per server multithread:
•
while (true)
–
aspettare le richieste del client (v. fase 2);
–
creare un thread con socket “client” come parametro.
Il thread crea flussi (v. fase 3) ed esegue la comunicazione
(v. fase 4);
–
fornito il servizio eliminare il thread.
Implementazione di un client
1. Creare un oggetto socket:
– client = new Socket ( server, port_id );
2. Creare flussi I/O per comunicare con il server:
– is = new DataInputStream( client.getInputStream() );
– os = new DataOutputStream( client.getOutputStream() );
3. Eseguire I/O o la comunicazione con il server:
– ricevere dati dal server: String line = is.readLine();
– inviare i dati al server: os.writeBytes(“Hello\n”);
4. Alla fine chiudere il socket:
– client.close();
FINE