Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - TCPClient ping di verifica
Forum - C# / VB.NET - TCPClient ping di verifica

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Roby94 (Member)
Guru


Messaggi: 1127
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 23:57
Domenica, 18/01/2015
Buonasera.
Solitamente quando adopero socket TCP non ho mai necessità di avere un aggiornamento in real time dello stato della connessione, ora però mi trovo ad avere un UI che per rimanerne operativa deve sapere che la connessione con il server "funzioni". Ho sempre verificato la connessione in fase di invio mediante verifica del ACK ricevuto, ora però avrei bisogno di un aggiornamento con un con periodo fisso; ogni 500ms potrebbe andare. Avevo pensato di implementare nel UI un thread che inviasse periodicamente un byte che il server scartasse una volta ricevuto. Data questa procedura un dubbio mi assale, l'UI parallelamente al thread di controllo può inviare una matrice di 4 byte, dove il primo non è mai uguale al byte di verifica, il server ricevuto questo byte si attende i restanti 3 byte che pero non è garantito che siano diversi dal byte di verifica, quindi se per caso UI inviasse il carattere di controllo durante una comunicazione causerebbe un disallineamento del segnale visto che il server potrebbe interpretare il byte di verifica come uno dei 3 byte di dati.

Ho letto che si può richiedere uno stato della connessione adoperando il metodo pool della classe Socket ma non riesco a capirne il funzionamento e come questo possa verificare la connessione senza inviare dei dati come potrei inviarli io con il byte di verifica.

Qualcuno mi potrebbe spiegare una soluzione corretta per evitare spiacevoli inconvenienti?

Grazie.


La programmazione è arte... fa che i tuoi script siano degni di un museo.
PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2763
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 9:19
Lunedì, 19/01/2015
Tutte le problematiche che poni sono superflue, in quanto è lo stesso protocollo TCP che te le garantisce http://it.wikipedia.org/wiki/Transmission_Control_Protocol

Dal momento che la connessione è TCP/IP non preoccuparti di null'altro che trasferire dati!


Ingegnere Informatico
https://ldlagency.it
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 9:54
Lunedì, 19/01/2015
Ma a cosa ti serve tutta questa storia? Perché ti poni tutte queste domande?

Tu devi solamente inviare e ricevere dati e, ovviamente, trattare gli eventuali errori.

Possono esserci mille motivi per cui una comunicazione non va a buon fine e possono intervenire un millisecondo dopo che tu hai fatto il controllo di cui parli. Quindi il controllo è assolutamente inutile.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1127
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 14:14
Lunedì, 19/01/2015
Quindi in poche parole quando richiamo il metodo Write è impossibile che si sovrapponga e vada a confondersi con un con altra istanza.
Cavolo adesso che ci penso è molto sensata la cosa, consideravo i 4 byte come separati ma in effetti finiscono nello stesso pacchetto e TCP tiene conto dell'ordine dei pacchetti, quindi è impossibile che il byte di controllo finisca in mezzo ad una serie di byte.
Grazie, ho fatto il tremendo errore di confondere il TCP con un semplice bus di basso livello.
Ma scusate la scelta del byte singolo è sensata per la verifica della connessione?


La programmazione è arte... fa che i tuoi script siano degni di un museo.
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 14:24
Lunedì, 19/01/2015
Non ci siamo capiti ...

Non devi testare la connessione. Devi solo inviare e ricevere i tuoi dati (e controllare eventuali errori durante queste fasi).


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1127
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 14:31
Lunedì, 19/01/2015
Testo quotato

Postato originariamente da nessuno:

Non ci siamo capiti ...


Sono d'accordo, ma è una necessita esclusivamente mia questo controllo, poiché voglio poter gestire le chiusure non controllate. Quando il server chiude la connessione invia un pacchetto che mi dice non siamo piu connessi, ma voglio poter gestire anche in caso il server si arresti in maniera anomala oppure venga escluso dalla rete o situazioni che comunque non contemplino l'invio del pacchetto di fine connessione, capito?


La programmazione è arte... fa che i tuoi script siano degni di un museo.
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 14:40
Lunedì, 19/01/2015
Io ho capito che vuoi fare, ma tu non hai capito che ti ho detto che è un approccio sbagliato.

Tutto quello che devi fare, come ti dicevo, è

-apri la connessione

-ricevi/invia dati

-controlla gli errori durante la ricezione/invio

-chiudi la connessione


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2763
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 14:42
Lunedì, 19/01/2015
Basta gestire gli eventi di errore, fa tutto TCP :)


Ingegnere Informatico
https://ldlagency.it
PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1127
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 14:48
Lunedì, 19/01/2015
Si avete pienamente ragione, volevo solo evitare di aspettare che il client dovesse inviare dei dati per verificare la connessione.
E gestione con errori in fase di invio sia, si capisce subito che è la scelta migliore.

Grazie mille.


La programmazione è arte... fa che i tuoi script siano degni di un museo.
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo