Socket - un primo esempio

Da Head First Java O'Reilly, capitolo 15. Networking e threads

Il primo esempio sulle connessioni di rete é basato sulla costruzione di una semplice applicazione in cui il server attende un client, gli manda un messaggio - il consiglio del giorno - e poi termina l'esecuzione. Il client, dal canto suo, cerca di connettersi al server, legge il messaggio che questo gli manda, lo stampa e termina l'esecuzione.

Iniziamo a vedere il server.

Il cuore della classe é una istanza della classe ServerSocket, che viene creata per la porta 4242.

Sul socket server così creato chiamiamo il metodo accept(), che "appende" il server in attesa di una richiesta del client. Come il client si connette, il metodo accept() ritorna un socket, da cui estraiamo l'output stream che utilizziamo per creare un oggetto PrintWriter, su cui scriviamo il nostro messaggio.

Completato il nostro flusso d'esecuzione, chiudiamo il PrintWriter, operazione che implica la chiusura di tutti gli stream aperti.

Ecco il codice:

package Chap15;

import java.io.*;
import java.net.*;

public class DailyAdviceServer {

private String[] advices = {"Have fun", "Eat less", "No alcohol today"};

public DailyAdviceServer() {
try {
ServerSocket ss = new ServerSocket(4242);

System.out.println("Waiting for a client ...");
Socket socket = ss.accept();
PrintWriter pw = new PrintWriter(socket.getOutputStream());

String advice = advices[(int) (Math.random() * advices.length)];
pw.println(advice);
pw.close();
System.out.println("The advice sent is: " + advice);
}
catch (IOException ioe) {
ioe.printStackTrace();
}
}

public static void main(String[] args) {
new DailyAdviceServer();
}
}


Il client funziona in modo speculare. Si crea un socket passandogli l'indirizzo IP della macchina su cui corre il server - nel nostro caso localhost - si crea un lettore sullo stream, e lo si bufferizza. Leggiamo una riga dal buffer, che sarà il testo che ci manda il server, chiudiamo il lettore e terminiamo l'esecuzione.

Questo il codice risultante:

package Chap15;

import java.io.*;
import java.net.Socket;

public class DailyAdviceClient {
public DailyAdviceClient() {
try {
Socket s = new Socket("localhost", 4242);
InputStreamReader isr = new InputStreamReader(s.getInputStream());
BufferedReader reader = new BufferedReader(isr);

System.out.println("Your today's advice: " + reader.readLine());
reader.close();
}
catch(IOException ioe) {
ioe.printStackTrace();
}
}

public static void main(String[] args) {
new DailyAdviceClient();
}
}

Nessun commento:

Posta un commento