Go Down

Topic: Controllo connessione client tcp-ip (Read 882 times) previous topic - next topic

QuercusPetraea

Quote
E' come se, per verificare perchè un telnet server non mi risponde, provo a pingare il server stesso..


Se il telnet server non risponde o ci sono problemi di connettività od il servizio è giù, ed il ping mi da gia una indicazione.

Se perdo connettività per qualche ragione con ping posso vedere quando questa è ritrovata, ed usando un ethernet.begin() si può ripartire senza resettare arduino. Se è il servizio che non va, allora è un altro paio di maniche. ;)

vic_20

Grazie delle risposte ma qualcosa non mi torna, il mio problema, che ancora non sono riuscito a risolvere  con l'arduino e semplice ma forse non mi spiego bene:

Se il server a cui e connesso l'arduino chiude la connesssione per qualsiasi mtivo, per fare si che l'arduino si riconnetta devo spegnerlo e riaccenderlo, non riesco a farglielo fare automaticamente, l'idea del ping non mi sembra valida perche non e la rete che cade ma la connessione in ingresso del server che viene chiusa.

Nelle mie prove per esempio uso un programma che si chiama HerculesSetup, che puo fungere da server, appena lo si avvia si imposta la porta su cui si deve mettere in ascolto poi lo si lancia in modalita listen.
accendo l'arduino e naturalmente mi si collega, il server lo vede..........eccc.
ma se provo a fermare il server e poi a farlo ripartire l'arduino non se ne accorge, e quindi non si ricollega, per farlo appunto devo spegnere l'arduino e poi riaccenderlo, devo trovare il modo per fare si che tutto funzioni in automatico.

Grazie a tutti!!!

vic_20

Visto che come al solito siete stati cosi gentili da rispondermi e inviare vari suggerimenti, mi sembra utile postare il codice con cui ho risolto il problema:

Code: [Select]

if (client.connected()) {

   }
   else {
  resetEthernet(); // Se il client si disconnette
     }

void resetEthernet() {

  client.stop() ;
     
  Ethernet.begin(mac, ip);
   delay(1000);
   if (client.connect()) {

  }
  else {
     
  }
}




Queste sono solo poche rige scritte velocemente per vedere se tutto funzionava, e sembra andare discretamente, infatti se il server chiude la connessione l'arduino tenta di ricollegarsi, bisognerebbe ampliare il prog inserendo un numero di tentativi massimo per la riconnessione, altrimenti l'arduino continua a tentare.

Grazie a tutti!!


bigjohnson

Ciao, penso che basti riconnettere il client.

Code: [Select]

if (client.connected()) {

   }
   else {
  resetClient(); // Se il client si disconnette
     }

void resetClient() {

   client.flush() ; // non ho controllato se lo stop flussha
   client.stop() ;
     
  // Ethernet.begin(mac, ip); // perchè fai ripartire l'interfaccia? Basta solo riconnettere il client.
   delay(1000);
   if (client.connect()) {

  }
  else {
     
  }
}


Ciao

Alberto

Go Up