Rubik ha scritto:
Per gestire la situazione quando il relé non è raggiungibile, ne parliamo quando hai superato questo step.
Come vedi già ti avevo anticipato...
Quando invii un comando che non va a buon fine, net.Socket da due tipi di errore:
1) ArgumentNullException, la scheda di rete del PC non è connessa
2) SocketException, l'SR-201 non è raggiungible (spento o IP sbagliato)
Come al solito ci sono vari modi di gestire la cosa, se modifichi l'esempio delle MSDN così:
stream.Close()
client.Close()
Catch err As ArgumentNullException
responseData = err.Message
Catch err As SocketException
responseData = err.Message
in responseData ti arriva il testo con la motivazione dell'errore.
Se del testo non ti importa nulla ma vuoi solo avere un sistema per aggiornare la grafica in conseguenza dell'errore:
stream.Close()
client.Close()
Catch err As ArgumentNullException
responseData = "00000002"
Catch err As SocketException
responseData = "00000003"
e ai 4 if che hai fatto per lo stato dei relè ne aggiungi altri due
"00000002" = connessione assente
"00000003" = IP irraggiungibile
Se non vuoi distinguere i due tipi di errore, basta un solo if, e mandi lo stesso codice per ambedue gli errori
La cosa bruttina è che il time-out per essere sicuri che non c'è risposta è di circa 20" (regolabile con ReceiveTimeout), e in quel tempo il programma rimane bloccato.
Per evitare questo, il socket deve agire su un thread separato in modo che si può mostrare l'attesa e il form non rimane bloccato.