Java/Socket: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica |
|||
Riga 114:
Nella pratica succede spesso che un server deve poter gestire le richieste di più client (mettiamo ad esempio la richiesta di una pagina web da più browser). Per fare questo bisogna conoscere le basi della programmazione multithreading in java, ed effettauare un'estensione della classe Thread o un'implementazione dell'interfaccia Runnable.
Ecco un modo per creare un server multithread. Sostanzialmente la tecnica si occupa di creare un oggetto server e tante sessioni di server.accept quante chiamate vengono effettuate dai client.
#Per
import java.io.*;
import java.net.*;
class ServerThread extends Thread ▼
# la classe che gestisce il server sarà un'estensione della classe Thread
{▼
this.socket = socket;▼
# dichiaro alcune variabili all'interno della classe che verrano utilizzate in seguito
private Socket s; //socket di connessione con il client
private BufferedReader in; //stream di input
private PrintWriter out; //stream di output
private String myclient;
#il costruttore della classe ha come oggetto il socket del client che effettua la richiesta di connessione al server. Inoltre in qusta fase ci si occupa di aprire il canale di comunicazione e di mandare in run il thread associato alla gestione del servizio
public serverMT(Socket s) throws IOException {
in = new BufferedReader(new InputStreamReader(s.getInputStream()));
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(s.getOutputStream())),true);
this.start();
}
#funzione che permette la gestione del servizio, verrà chiamata a seguito di this.start() dell'oggetto serverMT
public void run() {
try {
myclient = in.readLine();
while (true) {
String str = in.readLine();
if (str.equals("END")) break;
System.out.println("Ricevuto da C" + myclient + " e rispedito " + str);
out.println(str);
}
System.out.println("chiusura...");
s.close();
catch(IOException e) {System.out.println("Eccezione");}
}
}
|