Questa guida non tratterà come le precedenti l'awt ma bensì i socket non mi soffermerò a spiegare nel dettaglio java.net bensì mostro un semplice esempio di comunicazione TCP/IP in java usando il package java.net. Il programma composto da un lato client e lato server [/B] eseguirà le seguenti operazioni.
Il client
-Tentativo di Connessione su un ip e porta
-Comunicazione dell'estensione e lunghezza dal file da parte del client
-Invio del file
Il Server
-Avviare la connessione
-accettare il client
-Decifrare le informazioni utili
-Ricevere e creare il file in base alle informazioni ottenute
Come potete notare sono operazioni piuttosto comuni, vediamo di analizzare in dettagli ogni operazione partendo dal server.
Il server
Partiamo dal Package che conterrà tutte le classi create. Come per esempio Server.Identifichiamo il punto d'ingresso che è il main , di tipo static appunto perchè la JVM non può istanziare tale classe e notiamo che eseguo la propagazione dell'eccezione fino alla JVM(Quindi in finale è un eccezione che ho deciso di non gestire).
Iniziamo ad analizzare questa classe , partendo dal costruttore , come potete notare ,non uso il costruttore predefinito. Infatti il costruttore della Classe Server accetta un int , che rappresenta il numero di porta.
Il primo buffer , che deriva dalla classe Reader mi serve per gestire il testo che ricevo , invece il secondo buffer per gestire i byte del file.
da notare che la comunicazione Tcp/ip è bidirezionale, nel mio caso prendo soltanto l'inputStream, dato che il server è adempito per ricevere soltanto.
Passiamo alla seconda parte ...
Per snellire il codice ho usato una classe anonima senza nome, in pratica definisco la classe stessa ereditando TimerTask dato che schedule accetta un TimerTask, che a sua volta implementa l'interfaccia Runnable , in questo modo posso gestire la ricezione del testo , in un thread separato.Da prestare attenzione che dopo la classe anonima c'è anche ,2, è il secondo argomento di schedule che indica quante volte dovrà ripetere l'azione in run(Metodo definito dall'interfaccia). Run chiama il metodo controllainfo , dopodiché controlla se nella stringa data è presente del testo , se c'è interrompe il timer chiamando cancel e crea un altro Thread per la ricezione del file.
Ora passiamo alla vera è propria lettura dei dati che sono: l'estensione - la lunghezza del file
ora vediamo un altra classe interna , creata per il semplice fatto di poter accedere rapidamente ai membri della classe Server. Detto ciò vediamo cosa fa.
I commenti spiegano le parti essenziali del listato aggiungo solo una cosa per quanto riguarda i Thread. Infatti quest'ultimi possono essere "creati" anche nei seguenti modi:
Ora passiamo al client.
Il Client
Il client , è la quella applicazione che tenta di Connettersi al server ,conoscendo ip e porta.
N.b per Utilizzare l'applicazioni in remoto bisogna sbloccare le porte TCP
Classe Dati
Classe SendFileClient
Iniziamo dalla classe principale , dove c'è il main:
Passiamo alla seconda classe , che l'ho organizzata in modo tale , che controllasse se un file è valido , otteneva il suo nome e la lunghezza. In pratica si occupava della gestione locale.
Infine analizziamo la classe Client
Con questo è tutto se vi interessa il progetto già pronto contattatemi.:bye:
N.b la velocità d'invio in remoto dipende dalla rete.
Il client
-Tentativo di Connessione su un ip e porta
-Comunicazione dell'estensione e lunghezza dal file da parte del client
-Invio del file
Il Server
-Avviare la connessione
-accettare il client
-Decifrare le informazioni utili
-Ricevere e creare il file in base alle informazioni ottenute
Come potete notare sono operazioni piuttosto comuni, vediamo di analizzare in dettagli ogni operazione partendo dal server.
Il server
Codice:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
Partiamo dal Package che conterrà tutte le classi create. Come per esempio Server.Identifichiamo il punto d'ingresso che è il main , di tipo static appunto perchè la JVM non può istanziare tale classe e notiamo che eseguo la propagazione dell'eccezione fino alla JVM(Quindi in finale è un eccezione che ho deciso di non gestire).
Codice:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
Iniziamo ad analizzare questa classe , partendo dal costruttore , come potete notare ,non uso il costruttore predefinito. Infatti il costruttore della Classe Server accetta un int , che rappresenta il numero di porta.
Codice:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
da notare che la comunicazione Tcp/ip è bidirezionale, nel mio caso prendo soltanto l'inputStream, dato che il server è adempito per ricevere soltanto.
Passiamo alla seconda parte ...
Codice:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
Per snellire il codice ho usato una classe anonima senza nome, in pratica definisco la classe stessa ereditando TimerTask dato che schedule accetta un TimerTask, che a sua volta implementa l'interfaccia Runnable , in questo modo posso gestire la ricezione del testo , in un thread separato.Da prestare attenzione che dopo la classe anonima c'è anche ,2, è il secondo argomento di schedule che indica quante volte dovrà ripetere l'azione in run(Metodo definito dall'interfaccia). Run chiama il metodo controllainfo , dopodiché controlla se nella stringa data è presente del testo , se c'è interrompe il timer chiamando cancel e crea un altro Thread per la ricezione del file.
Ora passiamo alla vera è propria lettura dei dati che sono: l'estensione - la lunghezza del file
Codice:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
ora vediamo un altra classe interna , creata per il semplice fatto di poter accedere rapidamente ai membri della classe Server. Detto ciò vediamo cosa fa.
Codice:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
I commenti spiegano le parti essenziali del listato aggiungo solo una cosa per quanto riguarda i Thread. Infatti quest'ultimi possono essere "creati" anche nei seguenti modi:
Codice:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
Il Client
Il client , è la quella applicazione che tenta di Connettersi al server ,conoscendo ip e porta.
N.b per Utilizzare l'applicazioni in remoto bisogna sbloccare le porte TCP
Codice:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
Classe Dati
Codice:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
Classe SendFileClient
Codice:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
Iniziamo dalla classe principale , dove c'è il main:
Codice:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
Passiamo alla seconda classe , che l'ho organizzata in modo tale , che controllasse se un file è valido , otteneva il suo nome e la lunghezza. In pratica si occupava della gestione locale.
Codice:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
Infine analizziamo la classe Client
Codice:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
Con questo è tutto se vi interessa il progetto già pronto contattatemi.:bye:
N.b la velocità d'invio in remoto dipende dalla rete.