Connessione al database con Visual Basic NET? Lo trovi su Opentraining.it Visual Basic Italia
PRINCIPALE > ARTICOLO

Eseguire una ricerca veloce nell' archivio delle risorse di Visual Basic Italia®: 

Preso dall'archivio...

Premere il pulsante sotto per accedere direttamente ad un articolo o ad un esempio preso in modo casuale dall'archivio.



Ultimo e-book pubblicato:

"INTRODUZIONE AI CSS"

Lo scopo del CSS language è quello di controllare lo stile dei vari elementi che concorrono a formare un
documento HTML.
Si può operare in tre modi collegamento ad un foglio di stile esterno;definizione degli stili all'inizio
del documento utilizzo della proprietà style all'interno di un Tag HTML (embedded style). Questo e-book introduttivo
servirà per apprendere tali nozioni fondametali dei fogli di stile.

Prezzo: € 0.0.
Presentazione:
REAL SOFTWARE RILASCIA LA VERSIONE 5.0 di REALbasic per Windows






Gorizia, 5 maggio 2003 - Active, distributore in esclusiva di REALSoftware, Austin, Tx, annuncia la disponibilità di REALbasic 5.0 per Windows, uno strumento per lo sviluppo semplice da usare che permette agli utenti Windows di tutti i livelli di creare applicazioni personalizzate e di compilarle sia per la piattaforma Windows che per quella Macintosh.
[>>]

http://www.active-software.com

 

Contatti. Utilizzare l'email generica per domande relative al sito:
Porre domande relative al sito
oppure scrivere ad un responsabile di area.
Responsabile del sito: >Andrea Martelli
Responsabile area "Corso di VB":
> Giorgio Abraini

Visual Basic ed il protocollo NNTP: creare un newsreader (settima parte)

Questa lezione, consultata da 11237 utenti, è stata giudicata di ottimi contenuti , con un'esposizione perfettamente comprensibile e con un livello di approfondimento ottimo da 80 votanti.


Premessa

Una volta incluso all'interno del progetto il controllo Winsock trascinarlo sul piano di lavoro. E finalmente si arriva alla funzione AttesaRisposta.
Per comprenderne ancora meglio il significato è necessario aggiungere che la sua funzione non è solamente quella di interrompere l'attesa di risposta del server delle news, ma anche quella di bloccare temporaneamente l'applicazione nel mezzo di un'operazione che di fatto sta compiendo.
In parole povere, si immagini di richiedere un'informazione su un newsgroup da una sottoprocedura che, una volta ricevuta la risposta la processa e la stampa a video in una casella di testo. Senza la funzione AttesaRisposa() l'applicazione processerebbe una risposta (variabile Risposta) che di fatto corrisoponde ad una stringa vuota ("").
Questo perché, mentre l'applicazione che si sta sviluppando passa velocemente da un'istruzione alla successiva, nel processo di comunicazione client/server i tempi sono molto più lunghi.
E' pertanto necessario impostare delle priorità ben definite: verrà processata la risposta solamente quando la variabile Risposta conterrà un valore differente dalla stringa vuota.
Ciò non dà sicuramente adito ad errori: non accade mai infatti, come si vedrà meglio nei capitoli successivi, che la risposta dal server sia costituita soltanto da "".


VB.NET
'***********************************************************
' Attesa della risposta dal Server
'***********************************************************

1 Private Function AttesaRisposta() As Boolean
2 Dim Inizio As Double 'i millisecondi dalla mezzanotte ad ora
3 Risposta = "" 'elimina l'ultima risposta ricevuta dal server
4 Inizio = Microsoft.VisualBasic.Timer 'inizio del conteggio del time-out
5 Do While Risposta = "" And (Microsoft.VisualBasic.Timer - Inizio) < TimeOut
6 Application.DoEvents()
7 Loop
8 If Risposta <> "" Then
9 AttesaRisposta = True
10 Else
11 AttesaRisposta = False
12 AxWinsock1.Close()
13 MsgBox("Errore di time-out o mancata risposta del server.", vbCritical)
14 End If
15 End Function

VB6
'***********************************************************
' Attesa della risposta dal Server
'***********************************************************

1 Private Function AttesaRisposta() As Boolean
2 Dim Inizio As Double 'i millisecondi dalla mezzanotte ad ora
3 Risposta = "" 'elimina l'ultima risposta ricevuta dal server
4 Inizio = Timer 'inizio del conteggio del time-out
5 Do While Risposta = "" And (Timer - Inizio) < TimeOut
6 DoEvents()
7 Loop
8 If Risposta <> "" Then
9 AttesaRisposta = True
10 Else
11 AttesaRisposta = False
12 AxWinsock1.Close()
13 MsgBox("Errore di time-out o mancata risposta del server.", vbCritical)
14 End If
15 End Function

La riga 1 indica l'apertura della funzione che non necessita di alcun parametro. Il valore ritornato dalla funzione è invece booleano ed è impostato alle righe 8 e 9 su True in caso di successo ossia se la risposta dal server è positiva oppure su False se nel corso del tempo dall'avvio della funzione al time-out la risposta non è ancora arrivata.
La riga 3 è utile per svuotare dalla variabile Risposta la stringa di testo immagazzinata in un'eventuale precedente richiamo della medesima funzione AttesaRisposta().
La riga 4 assegna alla variabile Inizio il numero di millisecondi trascorsi dalla mezzanotte.
E' un utile metodo per assegnare un inizio che abbia una collocazione ben precisa nel tempo.
Le righe 5, 6 e 7 costituiscono il cuore della funzione: l'applicazione si bloccherà infatti in quelle tre righe di codice finchè si verificheranno contemporaneamente due condizioni: la mancanza di una risposta da parte del server ed il mancato raggiungimento del tempo limite di attesa (il time-out).
Nel caso in cui non ci sia risposta entro il limite impostato, verrà chiusa la connessione tramite la riga 12 e verrà visualizzato un messaggio di errore dalla riga 13.


La porta di comunicazione

Come già visto in precedenza la porta predefinita per il protocollo NNTP è la 119.
Tale parametro pertanto potrebbe essere addirittura escluso dalle scelte che si impongono all'utente prima della connessione. Tuttavia per rendere le cose ancora più chiare si ripeteranno le operazioni appena esaminate nei casi dei due valori precedenti NomeServer e TimeOut e si andrà ad aggiungere a Modulo_Impostazioni.vb la dichiarazione della variabile globale Porta.
Il modulo pertanto si presenterà con le seguenti tre dichiarazioni:

VB.NET
Module Modulo_Impostazioni
'IMPOSTAZIONI PER LA CONNESSIONE AL SERVER DELLE NEWS
Public NomeServer As String 'il nome del server delle news a cui connettersi
Public Porta As Integer 'la porta destinata alla comunicazione col server (predefinita la 119)
Public TimeOut As Integer 'il tempo massimo di attesa alla risposta del server
Public Risposta As String 'la risposta in formato testuale ricevuta dal server
End Module

VB6
'IMPOSTAZIONI PER LA CONNESSIONE AL SERVER DELLE NEWS
Public NomeServer As String 'il nome del server delle news a cui connettersi
Public Porta As Integer 'la porta destinata alla comunicazione col server (predefinita la 119)
Public TimeOut As Integer 'il tempo massimo di attesa alla risposta del server
Public Risposta As String 'la risposta in formato testuale ricevuta dal server

Si ripete anche per la variabile Porta il controllo della corretta impostazione all'interno dell'evento btnConnessione_Click:


VB.NET e VB6
'controllo dell'impostazione della porta di comunicazione da parte dell'utente

If Len(txtPorta.Text) = 0 Or Trim(txtPorta.Text) = "" Then
MsgBox("La porta di comunicazione non è valida" & vbCrLf _
& "e verrà pertanto scelta la 119.")
Porta = 119
Else
'una volta passato il controllo viene assegnato alla variabile il valore della casella di testo
Porta = CInt(txtPorta.Text)
End If

Si può facilmente notare che il messaggio di errore non porta all'annullamento della procedura di connessione: non è prevista infatti l'istruzione Exit Sub. Questo perché la variabile Porta verrà impostata sul valore predefinito 119 in caso di mancata definizione da parte dell'utente.
La funzione Cint che racchiude il valore della casella di testo txtPorta non serve altro che a trasformare in un intero il contenuto della TextBox che originariamente è in formato di testo e pertanto non adatto ad essere memorizzato all'interno di una variabile Integer com'è invece Porta.


Le risposte del server

Un capitolo molto importante e da studiare attentamente è questo sulle risposte che vengono inviate dal server all'applicazione client.
In particolare è necessario comprendere la classificazione nella quale è possibile suddividerle e che prevede la distinzione tra risposte testuali e di stato.
Le risposte testuali consistono in una o più linee di testo precedute da un una risposta di stato che anticipa le informazioni inviate.
Ad esempio, anticipando ciò che verrà nei prossimi capitoli, se si vuole ottenere dal server delle news il testo di un articolo con un determinato numero che lo identifica, come ad esempio l'articolo 219512, si possono ottenere varie risposte.
Quella che identifica il successo nel recupero del corpo dell'articolo specificato è la seguente:

222 219512 article retrieved - body follows -> risposta di stato
<corpo dell'articolo>
<corpo dell'articolo> -> risposta di testo
<..>
<..>
<corpo dell'articolo>

.


Questa risposta indica in generale che l'articolo è stato trovato nel database e che il testo che segue ne rappresenta proprio il corpo ossia quello che viene definito BODY.
Ma per un'analisi ancora più dettagliata si proverà a scomporre la risposta di stato di questo esempio nelle varie parti che lo costituiscono:

222 indica il codice della risposta: una risposta positiva alla richiesta dell'invio del BODY avrà sempre questo codice. Come si vedrà successivamente tale codice risulta davvero molto utile per determinare se l'applicazione client può procedere al parsing della risposta o se è necessario bloccarsi a causa di un errore.

219512 rappresenta l'intero identificativo dell'articolo del quale è stato richiesto il corpo.

article retrieved rappresenta in forma testuale ciò che il codice 222 ha espresso in forma numerica: l'articolo è disponibile sul server delle news.

Body follows invece indica il tipo di informazioni che seguirà il codice della risposta, in questo caso il BODY.

Di seguito si hanno successive linee che rappresentano i dati richiesti.
Come delimitatore ultimo presentano due righe vuote separate da un'ulteriore riga che presenta, come primo ed unico carattere un punto.
Ciò facilita enormemente le cose: si immagini infatti di richiedere più dati differenti in successione. Con questa notazione alla fine di ogni risposta è possibile conoscere in tempo reale quanto termina un'informazione e comincia il codice della risposta dell'informazione successiva.
Ad esempio:

222 219512 article retrieved - body follows
<corpo dell'articolo>
<corpo dell'articolo>
<..>
<..>
<corpo dell'articolo>

.

412 no newsgroup has been selected

.


In questo caso l'utilità della notazione sopra descritta è ancora più evidente.
Come si vedrà meglio successivamente si può considerare interrotta la prima risposta al presentarsi nel testo della risposta di una serie formata da una linea vuota, una linea con un punto ed ancora una line vuota:

VB.NET e VB6
Trim$(Risposta), vbCrLf & "." & vbCrLf

Naturalmente è da prendere il considerazione il fatto che un'informazione (da qui in poi si utilizzerà il termine informazione per definire la serie di dati inviati dal server in risposta ad una richiesta dell'applicazione client) possa essere rappresentata da una stringa vuota.
Ciò non esce affatto dall'affermazione dei capitoli precedenti: l'informazione può essere vuota ma il codice della risposta no.
Ad esempio si consideri di voler recuperare il BODY di un articolo che abbia un testo di lunghezza zero e che quindi sia rappresentato dalla stringa "".
In tal caso, se il messaggio verrà individuato sul server delle news, si otterrà una risposta del tipo:

222 219512 article retrieved - body follows

.


Inoltre non tutte le RFC presentano la stessa tipologia di risposta. RFC977 prevede che le informazioni strutturate (ossia quelle che contengono più dati eterogenei) abbiano la seguente costruzione:


Dato1 Dato2 Dato3

ossia che i dati siano separati semplicemente dallo spazio " ".
RFC2980 prevede invece un caso particolare, il comando OVERVIEW inviato il quale si otterrà un'informazione strutturata e suddivisa seguendo la costruzione:

Dato<TAB>Dato2<TAB>Dato3

dove cioè il carattere di separazione tra i differenti dati è il simbolo di tabulazione TAB, ottenibile in Visual Basic attraverso il codice Chr(9).