









Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Una panoramica sull'implementazione della programmazione concorrente e distribuita, focalizzandosi sui ruoli di server e client. Esplora la gestione delle connessioni tramite socket e l'uso della classe connectionhandler per gestire la comunicazione. Vengono presentati esempi pratici di reader e writer distribuiti, con particolare attenzione alla gestione multi-thread per consentire connessioni multiple. Il documento include anche esempi di codice per la generazione di client e la gestione della comunicazione, offrendo una guida completa per lo sviluppo di applicazioni concorrenti e distribuite.
Tipologia: Appunti
1 / 16
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!










public static final int PORT = …; public static void main(String[] args) throws IOException { ServerSocket server = new ServerSocket(PORT); try { Socket s = server.accept(); try { ConnectionHandler c=new ConnectionHandler(s); c.esegui(); } finally {s.close();} } finally {server.close();} } } La classe ConnectionHandler
public ConnectionHandler(Socket s, String str) throws IOException { fromClient = new BufferedReader( new InputStreamReader(s.getInputStream())); toClient = new PrintWriter( new OutputStreamWriter(s.getOutputStream())); vocabolo = str; } public void esegui() { try { String str; while((str = fromClient.readLine()) != null) { if(str.contains(vocabolo)) toClient.println(""); else toClient.println(str); toClient.flush(); } fromClient.close(); toClient.close(); } catch (IOException e) {e.printStackTrace();} } } Lato client
Lato server
Server multi-thread
Classe Server
Server public class Server { public static final int port = 10001; public static void main(String[] args) throws IOException { if (args.length != 1) { System.err.println("Uso: Server
private Socket myS; private BufferedReader fromClient; private PrintWriter toClient; public ConnectionHandler(Socket s, String str) throws IOException { myS = s; fromClient = new BufferedReader( new InputStreamReader(s.getInputStream())); toClient = new PrintWriter( new OutputStreamWriter(s.getOutputStream())); vocabolo = str; } public void run() { try { String str; while((str = fromClient.readLine()) != null) { if(str.contains(vocabolo)) toClient.println(""); else toClient.println(str); toClient.flush(); } fromClient.close(); toClient.close(); myS.close(); } catch (IOException e) {e.printStackTrace();} } }
ConnectionHandler c = new ConnectionHandler(s,args[0],num); c.start(); } else Thread.sleep(100); } finally {server.close();} } } ConnectionHandler public class ConnectionHandler extends Thread{ private String vocabolo; private Socket myS; private BufferedReader fromClient; private PrintWriter toClient; private Contatore c; public ConnectionHandler(Socket s, String str, Contatore n) throws IOException { myS = s; c = n; fromClient = new BufferedReader( new InputStreamReader(s.getInputStream())); toClient = new PrintWriter( new OutputStreamWriter(s.getOutputStream())); vocabolo = str; } public void run() { try { String str; while((str = fromClient.readLine()) != null) { if(str.contains(vocabolo)) toClient.println(""); else toClient.println(str); toClient.flush(); } fromClient.close(); toClient.close();
myS.close(); } catch (IOException e) {e.printStackTrace();} finally {c.dec(); System.err.println(c.val();} } } Generare i clinet
public class generaClient { public static void main(String[] args) throws InterruptedException { if(args.length != 1) { System.err.println("Uso: Client
public class Client extends Thread{ private static final String host = "localhost"; private File f;
Leggi: Il programma che legge
Leggi import java.io.; //il package di io import java.net.; //il package di rete public class Leggi { public static final int port = 10001; public static void main(String[] args) throws IOException { // 1. Istanzia il ServeSocket ServerSocket server = new ServerSocket(port); try { // 2. Si pone all'ascolto while(true) { Socket s = server.accept(); ConnectionHandler c = new ConnectionHandler(s); c.start(); }
finally {server.close();} } } ConnectionHandler
import java.io.; import java.net.; public class ConnectionHandler extends Thread { private Socket sIn; private DataInputStream dIn; private int clientID, somma; public ConnectionHandler(Socket s) throws IOException { dIn = new DataInputStream(s.getInputStream()); sIn = s; } public void run() { try { clientID = dIn.readInt(); //Legge ID Client while(true) //ripeti all'infinito try { somma += dIn.readInt(); //se eos viene sollevata //EOFException } catch (EOFException e) { break; //esci dal ciclo } System.out.println("Client: "+clientID +
for(int i=1; i<11; i++) { int num = rG.nextInt(MAX); System.out.println("Generato numero casuale "+ i +". Si tratta di " + num); dOut.writeInt(num); Thread.sleep(1000); } dOut.close(); s.close(); } } Osservazione