client() info

Buongiorno, sarà una domanda stupida ma qualcuno sa spiegarmi se client.connected() rappresenta una interrogazione continua di connessione del client al server(se posto nel loop)? Grazie

Forse sei stato un pò genrico... :)

riformulo: se in un loop di un server inserisco il comando if (client.connected());, posso riuscire a capire se effettivamente il client sia alimentato e "vivo", oppure devo necessariamente "pingarlo" per sapere se esiste ancora??? grazie

non ho ancora capito l'ambito, ma così a naso direi che sono due cose differenti. un client puo essere online ma allo stesso tempo non connesso. ping è la base ed è il metodo più semplice per sapere se un dispositivo tcpip (che supporta echo) è online o meno.

L'ambito è questo: un server arduino è in ascolto di un client arduino su una rete intranet. Il client invia post al server per l'accensione di un led: si connette al server solo quando il pulsante cambia stato. Dato che sto utilizzando il client come ingressi per un sistema d'allarme, ho bisogno di sapere se il client è "vivo" oppure me lo hanno sabotato: quale sistema adottare per sfruttare meno risorse del router? La funzione client.connected() del server può in qualche modo aiutarmi a "sentire" il client (magari ogni tot tempo)? Esiste qualche esempio a riguardo? Grazie, Fabio.

icmp è praticamnte fatto per questo :) puoi usare ping tranquillamente e interrogare in manira asincrona e senza inizializzare necessariamente una connessione (ti risparmi anche il transito un sacco di pacchetti).

grazie per il tempo dedicatomi, avresti qualche esempio per fare ciò con ethernet shield?

allora, se vuoi sapere se il client ha attualmente una connesione valida stabilita, o se ci sono ancora dati da leggere nel buffer, usi connect()

se invece vuoi sapere se il client è raggiungibile per una connessione, usi il ping. Il protocollo ICMP non è incluso nella libreria ethernet (ma supportato dal chip), esiste questa libreria: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1285859555

grazie, più che altro mi serve sapere se è "vivo", quindi un ping lo vedo più adatto e con la libreria è abbastanza semplice gestire con un delay la frequenza del ping. Ma c'è una guida per le funzioni dellla libreria?

up

ehmm... all'interno delle libreria c'è la cartella examples...

ma quando diventa true? come faccio a gestire la risposta, che poi è quella che mi serve per fare accendere il led......se è false output pin diventa High..????

non diventa true, ma bisogna giocare con quella che nell'esempio è la variabile buffer. usa l'esempio, e posta i risultati che vedi nella seriale, sia quando il client è up che quando è down. Purtroppo non ho una ethernet shield e più di così non posso aiutarti

quando è up: Reply[1] from ip 192,168.0.108: byte =32 time=2ms TTL=128 quando è down: Request Timed Out, naturalmente una volta down devo inizializzare nuovamente la seriale..... Byte=32 è un valore costante, time può cambiare, TTL=128 è costante: ora, come faccio a dirgli che se il valore è diverso da quando è up accendi il led se time potrebbe cambiare?

la cosa costante è "Request Timed Out" può capitare qualche Request Timed Out anche se è on-line, di solito si fanno 4 ping di seguito, se son tutti Request Timed Out, allora puoi dire con accettabile sicurezza che non c'è comunicazione.

provo a fare qualche ipotesi: il serial.println stampa il buffer, cioè quando il client è connesso Reply etc etc; ma quel magico Request Timed out quando non è connesso da quale comando magico è generato?

il buffer è un array di char, ovvero una stringa (una frase, per intenderci). le stringhe di risposta sono generate nella libreria per il ping. se ti stai chiedendo COME il buffer venga riempito, è una questione di puntatori, croce e delizia del linguaggio C