Sincronizza Indice |
Scarica il progetto |
Testo dell'articolo |
Stampa l'articolo |
In questa seconda parte vedremo come sviluppare il programma client che riceve i dati dal programma server visto nella prima parte. Mentre la parte server conteneva molto codice e pochi elementi grafici, la parte server contiene più controlli sul form e poche righe di codice.
Le uniche funzioni che il client deve effettuare sono la connessione al computer remoto Server alla porta 1500, la richiesta della struttura directory e la sua visualizzazione. Disponiamo
sul nostro form CientForm una label la cui Caption sia "Indirizzo
host" e alla destra di questa inseriamo una TextBox di nome HostName. Inseriamo ovviamente un controllo Winsock di nome Client. A causa di uno strano bug del Winsock è necessario creare una matrice di controlli per evitare errori. Per cui impostiamo anche la proprietà Index di questo controllo a 0. Per dare un tocco grafico abbiamo inserito anche un frame
la cui Caption è "Elenca files e cartelle". Sotto questi inseriamo un pulsante di comando di nome AggiornaButton la cui Caption sarà "Aggiorna". Nel momento in cui l'utente premerà questo verrà tentata la scansione del disco remoto in base ai pulsanti di opzione sopra. Per ultimo elemento inseriamo una ListBox di nome ElencoFiles. Per semplificare un po' il tutto impostiamo la proprietà Sorted di essa a True. Così facendo, tutti gli elementi che verranno inseriti dentro essa saranno ordinati alfabeticamente. La parte estetica del form è terminata.
Prima di passare al codice è bene definire meglio
il bug del controllo Winsock accennato prima. Dopo che ci si è
collegati ad un indirizzo, ci si scollega e si ritenta la connessione,
il controllo Winsock riporta un errore di runtime "Indirizzo già
in uso" sebbene la connessione precedente fosse stata chiusa
attraverso il metodo Close, via Client e via Server. Passiamo ora al codice:
Dichiariamo una variabile di nome ELENCADIR. Essa servirà da segnale nel momento in cui riceveremo l'elenco dal server.
All'avvio del programma allochiamo una nuova istanza del Winsock per risolvere il problema dell'indirizzo in uso.
Quando l'utente preme il pulsante Connetti, innanzitutto viene controllato se il campo HostName contiene qualcosa. Se è vuoto non tenta nemmeno la connessione. Supponiamo che il campo HostName contenga un indirizzo valido.
Nel momento in cui l'utente preme il pulsante Disconnetti viene chiusa la connessione via client.
Questo è l'evento Click del pulsante AggiornaButton. Quando l'evento scatta, viene controllato se la connessione è stabilita, mediante la proprietà State del controllo Client. Se la connessione non è avvenuta, esce immediatamente dalla funzione senza far nulla. Se la connessione è stabilita, imposta il flag ELENCADIR, indicando che i prossimi dati che arriveranno al controllo Client, saranno i dati della struttura della cartella remota. Dopodichè segue il controllo del pulsante di opzione premuto. A seconda del pulsante di opzione scelto viene eseguito il comando corrispondente.
L'evento DataArrival scatta nel momento in cui vengono inviati
dati dal server verso il client.
Nel momento in cui l'utente clicca due volte sull'elenco dei files viene inviato al server il comando CD che indica il cambio della cartella attiva.
L'ultima funzione di questo programma è la PreparaElenco che legge la stringa ricevuta dal server ed inserisce gli elementi all'interno dell'elenco dei files. Per prevenzione azzera subito il flag ELENCADIR. Azzera anche la ListBox ElencoFiles.
Prima di iniziare a lavorare elimina l'intestazione del pacchetto, ovvero la " +OK:", andando a cercarsi il primo INVIO (vbNewLine) dentro esso (riga 41). Alla riga successiva memorizza la posizione del prossimo INVIO dentro la variabile INVIO. La riga 43 è un controllo d'obbligo: se ci troviamo davanti ad un elenco vuoto, per esempio un'elenco di files di una cartella vuota. Per capire questo verifica se esiste un altro INVIO dopo quello indicato dalla variabile INVIO. Se non riesce a trovarlo, imposta quest'ultima a 0, forzando l'uscita del ciclo alla prossima riga. La riga 44 inizia un ciclo che dura fintanto che la variabile INVIO conterrà un numero diverso da 0, ovvero fintanto che ci saranno caratteri di INVIO nell'elenco, quindi fintanto che ci saranno altri files o cartelle. Questo ciclo contiene 3 istruzioni: |
Il programma Client termina qui.
Lo sviluppo di architetture Client/Server
presenta sempre numerosi rischi, e tra i principali spicca la perdita
di un pacchetto durante il tragitto.
Fibia
FBI
|
Torna all'indice Client/Server |