Un esercizio simile
Quello che ho fatto per un esercizio utilizzando MVC, socket e thread multipli è stato innanzitutto quello che ho chiamato i "modelli". Questo esercizio è stato chiamato Echo Client / Server perché tutto ciò che il server ha fatto è stato eco a ciò che ogni client ha inviato al server, al client che ha inviato il messaggio.
Il mio esercizio è stato un po 'più semplice di un esercizio di chat, ma i due esercizi sono molto simili per natura.
Le mie classi:
- La classe EchoServer, il modello per il server non ha assolutamente alcuna interfaccia utente.
- La classe EchoServerDaemon, solo una classe con un metodo main () per creare un oggetto EchoServer e avviare un thread per esso, una vista
- La classe EchoClient, il modello per il lato client con assolutamente non l'interfaccia utente
- EchoClientConsole, una vista della console del input / output del client
- La classe EchoUtils che contiene tutto ciò che serve al modello EchoServer e al modello EchoClient, come il numero di porta predefinito.
Potrei aver aggiunto classi come le seguenti classi senza molto lavoro perché le classi modello EchoServer ed EchoClient erano indipendenti dalle loro interfacce utente:
EchoServerConsole, un server con una vista della console
EchoServerGUI, un server con una vista GUI
o
EchoClientGUI, un client con una vista della GUI
- Ho ottenuto il modello per primo.
- Quindi, ho ottenuto le viste specificate.
- Ho fatto durare i controller, collegando il modello e la vista.
Credo che avere più thread per un server sia praticamente obbligatorio.
Sul server, ho avuto una classe con un thread che ho chiamato ConnectionListener che è una classe interna di EchoServer. ConnectionListener chiama principalmente serverSocket.accept () e crea connessioni.
Ho anche avuto un thread per ogni connessione chiamata ConnectionServicer . Ogni connessione client era servita da un thread ConnectionServicer separato in modo che il server nel suo insieme potesse chiamare read () e write () e se il thread fosse bloccato, nient'altro si sarebbe bloccato.
Non penso che il client abbia bisogno di un thread separato a meno che tu non stia facendo qualcosa di dispendioso in termini di tempo, come il download di un file di grandi dimensioni.
Se vuoi che il mio codice sorgente sia disponibile, fammelo sapere.