La creazione di un progetto da zero in Visual Basic NET? Lo trovi su Opentraining.it Visual Basic Italia
Guide e Tutorials:indexed
La prima applicazione con Winsock: l'ora esatta (Tutorial completo)

Attraverso questo piccolo esempio saremo in grado di ottenere l'ora e la data esatta prelevandola direttamente dal server al quale decidiamo di connetterci. Di per sè l'applicazione non rivela la sua vera utilità che sta invece nell'imparare (o ripassare) i concetti del protocollo DAYTIME, uno dei tanti supportati dal controllo Microsoft Winsock.
Per poter sviluppare questa elementare applicazione non c'è la necessità di conoscere alcuna base teorica. Tutto ciò che dovremo fare obbligatoriamente sarà collegarci alla porta 13.

Cominciamo a sviluppare l'interfaccia grafica. Apriamo un nuovo progetto EXE Standard. Comparirà in questo modo una form, denominata per default Form1.
Su Form1 trasciniamo il controllo Microsoft Winsock, aggiungendolo dalla lista dei componenti disponibili.
Terminata questa operazione dovremo porre sul piano altre tre coppie di controlli ossia due CommandButton, due Label e per finire due TextBox.
Come risultato avremo in definitiva: un controllo Winsock, due Label, due caselle di testo e due pulsanti, proprio come mostrato nell'immagine che segue:


Precisiamo che la disposizione consigliata di questo gruppo di controlli (dal punto di vista dell'intuitività dell'applicazione, non certo da quello dell'originalità) è quella mostrata dalla figura, ma non c'è assolutamente limite alla fantasia di ognuno.
Adesso preoccupiamoci di assegnare un titolo (naturalmente non univoco) a ciascuno dei controlli presenti sul piano. Per fare ciò utilizzeremo per ognuno di essi la proprietà Caption, cosa che può essere fatta da codice o utilizzando la finestra di Visual Basic denominata Proprietà:


Utilizzando tale finestra impostiamo la proprietà Caption di Form1 col nome di "DayTime", il controllo Label più in alto "Server", quello più in basso "Data e ora corrente", il pulsante a sinistra "Connetti", quello a destra "Annulla" ed annulliamo il testo delle due TextBox impostandone la Caption a "" (stringa nulla). Il risultato è quello che segue:


Adesso buttiamoci sul codice e più precisamente sul blocco di codice che arricchisce l'evento Click di Command2 (il pulsante "Annulla"). Siccome l'applicazione richiede una connessione al server della durata di qualche secondo al massimo, non teniamo conto della possibilità di annullare tale collegamento. Il tasto Annulla servirà allora solamente per uscire dall'applicazione:

Private Sub Command2_Click()
Unload Me
End Sub

Adesso passiamo a Command1, il pulsante "Connetti". Siccome può capitare di richiedere la data una seconda volta e più, è necessario annullare ad ogni connessione la data rilevata in precedenza:

Private Sub Command1_Click()
Text2.Text = ""
...
End Sub

Per quanto riguarda invece il collegamento alla porta 13 del server prescelto, utilizziamo il metodo Connect del controllo Microsoft Winsock. Il nome del server è determinato da una stringa indicata nella TexBox1. La funzione Trim$ o più semplicemente Trim rimuove gli eventuali spazi presenti all'inizio o alla fine della stringa:

Winsock1.Connect Trim$(Text1.Text), 13

Ecco quindi come si presenta l'evento Click di Command1:

Private Sub Command1_Click()
Text2.Text = ""
Winsock1.Close
Winsock1.LocalPort = 0
Winsock1.Connect Trim$(Text1.Text), 13
End Sub

Adesso passiamo all'evento Load di Form1, evento al verificarsi del quale, sia TextBox1 che TextBox2 conterranno stringhe di testo di lunghezza zero "", procedimento per la verità ridondante nel caso in cui si sia già impostato il tutto attraverso la finestra Proprietà come esposto in testa all'articolo:

Private Sub Form_Load()
Text1.Text = ""
Text2.Text = ""
End Sub

Una volta premuto il pulsante "Connetti", nel caso in cui il Server sia provvisto del servizio Segnale Orario, accetterà la richiesta della nostra applicazione, ci trasmetterà i dati ora e data correnti e richiuderà automaticamente la connessione. Da parte sua il controllo Microsoft Winsock ci avviserà dell'eventuale arrivo dei dati attraverso l'evento DataArrival. Una volta arrivati i dati, dovranno essere recuperati con il metodo GetData. Vediamo quindi l'evento DataArrival di Microsoft Winsock:

Private Sub Winsock1_DataArrival(ByVal BytesTotali As Long)
Dim Dati As String
Winsock1.GetData Dati, vbString
TextBox2.Text = TextBox2.Text & Trim$(Dati)
End Sub

In realtà questo procedimento va spiegato un po' più chiaramente. Non si comprende altrimenti il motivo per cui i dati devono essere recuperati attraverso il metodo GetData se già sono stati prelevati dal server al verificarsi dell'evento DataArrival.
In realtà i dati scaricati dal server vengono memorizzati nel buffer cioè in un'area di memoria usata specificatamente per conservare temporaneamente i dati da trasferire ad un determinato dispositivo.
Attraverso il metodo GetData, tali informazioni vengono prelevate dal buffer e posti in una stringa di testo, Dati, che, una volta "potata" degli eventuali spazi vuoti a destra e a sinistra della stessa mediante la funzione Trim$, viene inserita nella TextBox2 come risultato dell'operazione.

Per completare l'applicazione inseriamo nell'evento Error del controllo Microsoft Winsock il codice che ci permette di determinare il tipo di errore eventualmente ottenuto da un non corretto funzionamento del programma:

Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, _
ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, _
ByVal HelpContext As Long, CancelDisplay As Boolean)
MsgBox "Errore: " & Number & vbCrLf & Description, vbCritical
End Sub

Ecco in definitiva il codice completo. L'esempio in formato compresso può essere in ogni caso scaricato dalla rubrica ESEMPI:

Private Sub Command2_Click()
Unload Me
End Sub
Private Sub Command1_Click()
Text2.Text = ""
Winsock1.Close
Winsock1.LocalPort = 0
Winsock1.Connect Trim$(Text1.Text), 13
End Sub
Private Sub Form_Load()
Text1.Text = ""
Text2.Text = ""
End Sub
Private Sub Winsock1_DataArrival(ByVal BytesTotali As Long)
Dim Dati As String
Winsock1.GetData Dati, vbString
TextBox2.Text = TextBox2.Text & Trim$(Dati)
End Sub
Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, _
ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, _
ByVal HelpContext As Long, CancelDisplay As Boolean)
MsgBox "Errore: " & Number & vbCrLf & Description, vbCritical
End Sub

Utilizzare questo esempio significa però conoscere un server disponibile a questo genere di connessione.

Archivio:ndexed
Lezioni Commenta questa lezione Invia la tua guida Avviso per le nuove lezioni
Proponi un argomento

Visual Basic Italia© copyright 2000 - tutti i diritti riservati
E-mail:
vbitalia@libero.it