Go Down

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

vic_20

Salve a tutti, ho creato un piccolo client tcp con arduino che si collega ad una macchina (Server) per interrogarla, non so pero come fare in modo che se la connessione Arduino, server si interrompe l'arduino si riconnetta automaticamente, qualcuno ha qualche idea?

pitusso

Quote
non so pero come fare in modo che se la connessione Arduino, server si interrompe l'arduino si riconnetta automaticamente,

cosa intendi per riconnettersi automaticamente?
Intendi al server/servizio? O alla rete?

vic_20

Si non sono stato molto chiaro.......l'arduino (client) si collega alla macchina (SERVER) per interrogarla, ma se la connessione arduino macchina cade ho bisognio che l'arduino tenti di ricollegarsi automaticamente, ma non so come controllare se la connessione tra i due sia attiva o no, qualche idea

QuercusPetraea

Dovresti poter fare dei ping periodici verso il server per verificare se la connessione è attiva.
Prova dare un'occhiata a questo thread http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1285859555; magari ti torna utile

Ciao

pitusso

Ciao,
non mi torna qualcosa:

Quote
l'arduino (client) si collega alla macchina (SERVER) per interrogarla, ma se la connessione arduino macchina cade ho bisognio che l'arduino tenti di ricollegarsi automaticamente


nel caso la connessione cada, Arduino la riapre.
Se è una connesione client-server, è sufficiente constatare che il server non risponde alla chiamata stessa, per riaprirla...

Quote
Dovresti poter fare dei ping periodici verso il server per verificare se la connessione è attiva.


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

Quindi, il problema dove può risiedere?
O il server ha problemi, e Arduino poco può fare, oppure ha problemi la rete, e ancora Arduino poco può fare, oppure ci son problemi allo shield ethernet.

Magari se contestualizzi di più la possibile problematica, ci aiuti ad aiutarti.  XD

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