hemmaus (Normal User)
Pro
Messaggi: 96
Iscritto: 15/07/2009
|
Visto che non amo molto i timer volevo domandare, esiste una sub del tipo:
Private Sub winsock1_change()
if winsock1.state <>7 then 'connessione non attiva
in modo da intercettare lo stato della connessione con il winsock server ?
Grazie.
|
|
Overflow (Normal User)
Expert
Messaggi: 334
Iscritto: 11/01/2008
|
adesso non ricordo bene, ma credo ci sia l'evento close:
Codice sorgente - presumibilmente VB.NET |
Private Sub Winsock1_Close() msgbox "la connessione è chiusa" End Sub
|
|
|
hemmaus (Normal User)
Pro
Messaggi: 96
Iscritto: 15/07/2009
|
Non mi sono spiegato bene.
Ho la necessità di intercettare lo stato della connessione senza che il controllo passi per un Timer, non chiudere la connessione.
|
|
Overflow (Normal User)
Expert
Messaggi: 334
Iscritto: 11/01/2008
|
intercettare che vuol dire??
poi io ti ho parlato di evento, winsock tra i suoi eventi ne ha due in particolare connect e close: il primo viene chiamato quando avviene la connessione, il secondo evento invece quando viene chiusa la connessione.
|
|
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
|
Non ci sono eventi che ti diano questa informazione e questo perche' non ha senso conoscerla continuamente.
Lo stato del winsock deve essere esaminato quando serve ovvero durante quelle fasi per cui esistono gli eventi disponibili con il winsock.
|
|
hemmaus (Normal User)
Pro
Messaggi: 96
Iscritto: 15/07/2009
|
Postato originariamente da theprogrammer:
Non ci sono eventi che ti diano questa informazione e questo perche' non ha senso conoscerla continuamente.
|
Ok! Aiutatemi a risolvere il problema:
Attualmente:
Il programma client(winsock) si collega al server(winsock) il quale genera una chiave e risponde correttamente, il client autentica la chiave e la connessione è stabile.
Il server(winsock) viene chiuso, per qualsiasi motivo, il client come fa a ricollegarsi?
Qui ho inserito un timer che si accorge dello stato " winsock.state<>7 " e ripete la connessione.
Il problema sarebbe facilmente aggirabile se fosse il client ad essere chiamato dal server. Ma questo non si può fare. La connessione è aperta dal client al server e non posso fare diversamente.
Il timer funge bene, ma concettualmente non mi piace. Cosa ne pensate ? |
|
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
|
Quando il computer remoto chiude la connessione, dovrebbe scattare l'evento Close nel client ...
|
|
muteblaster (Member)
Pro
Messaggi: 87
Iscritto: 16/07/2009
|
nemmeno a me' i timer una volta piacevano, poi pero' ne ho capito la loro importanza , a volte possono causare dei problemi ma se si sa' usare bene si capisce che sono indispensabili.....( chiudiamo la parentei ).....
in teoria per fare quello che vuoi tu sarebbe necessario un timer che all'evenuta nuova connessione si disabiliti......pero' in alternativa si potrebbe usare ( non e' una buona soluzione ) in maniera improrpia un delay......cioe' una specie di ritardo.....
questo e' quello ch uso io ( solo n caso strettamente necessario )
Codice sorgente - presumibilmente VB.NET |
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub Pausa(ByVal interval As Double) Dim Current As Double Current = Timer Do While Timer - Current < interval Sleep 15 DoEvents Loop End Sub
|
si usa
pausa 1 e ritarda di un secondo
tu puoi creare un escamotage che in maniera ciclica ti ripeta la pausa......
come puoi vedere nel codice pero' e' necessario usare un dispendioso doevents.......
|
|
hemmaus (Normal User)
Pro
Messaggi: 96
Iscritto: 15/07/2009
|
Postato originariamente da theprogrammer:
Quando il computer remoto chiude la connessione, dovrebbe scattare l'evento Close nel client ... |
Come al solito avevi ragione!
Ecco l'evento:
Codice sorgente - presumibilmente VB.NET |
Private Sub winsock_Close() winsock.Close MsgBox ("Intercettata chiusura") End Sub
|
Grazie! Ultima modifica effettuata da hemmaus il 02/08/2009 alle 11:04 |
|