Sorgenti Java per il programma di Laboratorio

I link elencati nel seguito conducono ai sorgenti java dei principali programmi sviluppati nell'ambito del corso. Essi possono essere copiati localmente, quindi compilati e mandati in esecuzione. Naturalmente, possono essere anche modificati a piacimento.

Per poter compilare i sorgenti ed eseguire i programmi è necessario scaricare ed installare la macchina virtuale Java, che si trova qui. Una volta in quella pagina seguire il link relativo al JDK e quindi scegliere la versione adatta alla propria piattaforma di calcolo.

Per quanto riguarda gli stream per la gestione di messaggi, che verranno usati nelle esercitazioni 11 e 12, è possibile consultare la documentazione in linea tratta dal libro di Hughes, C. Hughes, M. Shoffner, M. Winslow: Java Network Programming, Manning Publications Co.

In particolare sono per noi significativi i package prominence.msg e prominence.util


Esercitazione nº 1

Una semplice applicazione per impratichirsi con le fasi di creazione, compilazione ed esecuzione. L'applicazione presenta una scarna interfaccia utente, dotata di alcuni campi testo, aree testo e bottoni. Esiste una minimale gestione degli eventi.

Istruzioni:

  1. Salvare localmente i file java di cui ai link successivi.
  2. Compilare i file con il compilatore Java.
  3. Mandare in esecuzione il file BaseAppE1.class.
Sorgenti Java per jdk 1.0.2: Sorgenti Java per jdk 1.1.x: Note d'uso:
Esercitazione nº 2

Una applicazione che copia quanto immesso nello standard input sullo standard output.

Istruzioni:

  1. Salvare localmente i file java di cui ai link successivi.
  2. Compilare i file con il compilatore Java.
  3. Mandare in esecuzione il file InToOut.class.
Sorgenti Java per jdk 1.0.2: Sorgenti Java per jdk 1.1.x: Note d'uso:
Esercitazione nº 3

Una applicazione che apre un file di testo e lo visualizza in una textArea, e che salva il contenuto della stessa textArea in un nuovo file di testo.

Istruzioni:

  1. Salvare localmente i file java di cui ai link successivi.
  2. Compilare i file con il compilatore Java.
  3. Mandare in esecuzione il file BaseAppE3.class.
Sorgenti Java per jdk 1.0.2: Sorgenti Java per jdk 1.1.x: Note d'uso:
Esercitazione nº 4

Una applicazione che apre una connessione di rete con un server, invia il comando immesso in una textArea, e mostra la risposta del server in un'altra textArea.

Istruzioni:

  1. Salvare localmente i file java di cui ai link successivi.
  2. Compilare i file con il compilatore Java.
  3. Mandare in esecuzione il file BaseAppE4.class.
Sorgenti Java per jdk 1.0.2: Sorgenti Java per jdk 1.1.x: Note d'uso:
Esercitazione nº 5

Un semplice server che accetta una sola connessione sul port 5000 e restituisce al client tutto ciò che riceve.

Istruzioni:

  1. Salvare localmente i file java di cui ai link successivi.
  2. Compilare i file con il compilatore Java.
  3. Mandare in esecuzione il file SimpleServer.class.
Sorgenti Java per jdk 1.0.2: Sorgenti Java per jdk 1.1.x: Note d'uso:
Esercitazione nº 6

Applicazione che lancia due thread, i quali scrivono con cadenze diverse un messaggio ciascuno sullo standard output.

Istruzioni:

  1. Salvare localmente i file java di cui ai link successivi.
  2. Compilare i file con il compilatore Java.
  3. Mandare in esecuzione il file PingPong.class.
Sorgenti Java per jdk 1.0.2: Sorgenti Java per jdk 1.1.x: Note d'uso:
Esercitazione nº 7

Applicazione simile alla precedente, realzzata tramite l'interfaccia Runnable.

Istruzioni:

  1. Salvare localmente i file java di cui ai link successivi.
  2. Compilare i file con il compilatore Java.
  3. Mandare in esecuzione il file RPingPong.class.
Sorgenti Java per jdk 1.0.2: Sorgenti Java per jdk 1.1.x: Note d'uso:
Esercitazione nº 8

Una applicazione che apre una connessione di rete con un server, invia il comando immesso in una textArea, e mostra la risposta del server in un'altra textArea. E' simile all'esercitazione nº 4, ma sfrutta un thread separato per la ricezione dei dati dal server.

Istruzioni:

  1. Salvare localmente i file java di cui ai link successivi.
  2. Compilare i file con il compilatore Java.
  3. Mandare in esecuzione il file BaseAppE8.class.
Sorgenti Java per jdk 1.0.2: Sorgenti Java per jdk 1.1.x: Note d'uso: Versione Applet

Seguendo questo link si carica dal server Web, per mezzo di un'apposita pagina html, una versione di questa applicazione che si avvia come applet, all'interno della pagina html stessa. Le funzionalitò sono analoghe a quelle dell'applicazione precedente, salvo per il fatto che non si possono aprire connessioni di rete con host diversi da quello da cui è stato scaricato l'applet.


Esercitazione nº 9

Un server multithreaded che accetta connessioni sul port 5000 e restituisce ai client connessi, in broadcast, tutto ciò che riceve da ciascuno di essi. Inoltre manda a tutti un avviso ogniqualvolta un client si connette o si sconnette. Istruzioni:

  1. Salvare localmente i file java di cui ai link successivi.
  2. Compilare i file con il compilatore Java.
  3. Mandare in esecuzione il file ChatServer.class.
Sorgenti Java del server per jdk 1.0.2: Sorgenti Java del server per jdk 1.1.x: Note d'uso: Per connettersi a ChatServer si deve usare il client di cui ai link successivi. Esso è una semplice variazione del client sviluppato nell'esercitazione nº 8. La differenza consiste nel fatto che questa versione del client invia automaticamente al server, appena vi si connette, una linea di testo (prelevata dalla TextArea con etichetta "Command") che il server utilizza successivamente come identificativo dell'utente connesso. In questo modo si realizza di fatto una minimale architettura di tipo client-server.

Sorgenti Java del client per jdk 1.0.2:

Sorgenti Java del client per jdk 1.1.x:
Esercitazione nº 10

Una applicazione che mostra un esempio di schema produttore-consumatore facendo ricorso ai metodi wait() e notify().

La classe Consumer rappresenta un consumatore che cerca di consumare un oggetto (se c'è) estraendolo da un Vector. Usa un thread separato per questo, e sfrutta wait() per rimanere in attesa finché non risulta disponibile un oggetto da consumare.

Il produttore è costituito dall'utente, che attraverso il thread principale (quello del main()) aggiunge oggetti e utilizza notify() per risvegliare il consumatore.

Istruzioni:

  1. Salvare localmente i file java di cui ai link successivi.
  2. Compilare i file con il compilatore Java.
  3. Mandare in esecuzione il file Consumer.class.
Sorgenti Java per jdk 1.0.2: Sorgenti Java per jdk 1.1.x: Note d'uso:
Esercitazione nº 11

Esempio di sistema client-server per la gestione di transazioni, basato sull'uso di stream di messaggi.

E' costituito da un client e da un server multithreaded. Quest'ultimo accetta e gestisce molte transazioni in concorrenza. Grazie all'uso dei messaggi, i dati relativi alle diverse transazioni possono viaggiare sullo stesso canale di comunicazione senza disturbarsi a vicenda.

Istruzioni:

NOTA: poiché le classi di utilità per la gestione dei messaggi costituiscono uno o più Package, è necessario seguire accuratamente le istruzioni sotto riportate (con particolare riguardo alla struttura di direttori che deve essere creata) per poter compilare con successo i sorgenti del client e del server.

  1. Salvare localmente i file java di cui ai link successivi, creando una struttura di direttori secondo le indicazioni riportate.
  2. Compilare i file TransactionClient.java e TransactionServer.java con il compilatore Java (questo implica automaticamente anche la compilazione delle classi di utilità).
  3. Mandare in esecuzione il file TransactionServer.class con la macchina virtuale Jrunner di Apple.
  4. Mandare in esecuzione il file TransactionClient.class con la macchina virtuale del JDK.
Sorgenti Java per jdk 1.0.2 e relative relazioni nella struttura dei direttori da creare: Sorgenti Java per jdk 1.1.x e relative relazioni nella struttura dei direttori da creare: Note d'uso per il server:

Note d'uso per il client:


Esercitazione nº 12

Chatline grafica e testuale, basata sul multiplexing di stream di messaggi. E' costituita da un client, che consente di inviare del testo oppure un disegno effettuato a mano libera, e da un server multithreaded.

Il client è costituito da due componenti distinte. La prima invia al server di volta in volta un pacchetto contenente il testo che è presente in un TextField, non appena si preme il tasto Return dentro tale TextField. La seconda invia al server di volta in volta un pacchetto contenente la rappresentazione di un tratto disegnato a mano libera, non appena si rilascia il pulsante del mouse dopo aver creato tale tratto. Grazie all'uso dei messaggi, i pacchetti generati dalle due componenti viaggiano sullo stesso canale di comunicazione senza disturbarsi a vicenda. Successivamente, quando tali pacchetti (grazie al ruolo svolto dal server) raggiungono un client, questi li smista alla corretta componente (testuale o grafica) che provvede a gestirli opportunamente.

Il server accetta connessioni sul port 5000 e restituisce ai client connessi, in broadcast, tutto ciò che riceve da ciascuno di essi.

Istruzioni:

NOTA: poiché le classi di utilità per la gestione dei messaggi costituiscono uno o più Package, è necessario seguire accuratamente le istruzioni sotto riportate (con particolare riguardo alla struttura di direttori che deve essere creata) per poter compilare con successo i sorgenti del client e del server.

  1. Salvare localmente i file java di cui ai link successivi, creando una struttura di direttori secondo le indicazioni riportate.
  2. Compilare i file che costituiscono il client, e cioé CollabTool.java, Chatboard.java e WhiteBoard.java con il compilatore Java (questo implica automaticamente anche la compilazione delle necessarie classi di utilità).
  3. Compilare i file che costituiscono il server, e cioé CollabServer.java e CollabHandler.java con il compilatore Java (questo implica automaticamente anche la compilazione delle necessarie classi di utilità).
  4. Mandare in esecuzione il file CollabServer.class con la macchina virtuale Jrunner di Apple.
  5. Mandare in esecuzione il file CollabTool.class con la macchina virtuale del JDK.
Sorgenti Java per jdk 1.0.2 e relative relazioni nella struttura dei direttori da creare: Sorgenti Java per jdk 1.1.x e relative relazioni nella struttura dei direttori da creare:

Note d'uso per il server:

Note d'uso per il client: