Utilizzo un Arduino Uno con Ethernet Shield.La connessione al client Ethernet Arduino (Uno) non riesce dopo molte stampe client
Dopo aver inviato molte richieste HTTP, client.println (...), il client inizia a fallire durante la connessione. Il time to failure sembra essere casuale, e la lettura della sequenza dal loop può variare tra ~ 1000 e ~ 7000.
L'errore non è a che fare con l'Ethernet Buffer di trasmissione traboccante (seguendo this advice)
Ecco il codice che sta fallendo:
#include <Ethernet.h>
#include <SPI.h>
// Network constants
byte mac[] = {0x00, 0x23, 0xdf, 0x82, 0xd4, 0x01};
byte ip[] = {/*REDACTED*/};
byte server[] = {/*REDACTED*/};
int port = /*REDACTED*/;
Client client(server, port);
// State
int sequence;
void setup(){
Ethernet.begin(mac, ip);
Serial.begin(9600);
sequence = 0;
delay(1000);
}
void loop(){
httpPut("/topic/:test/publish?sessionId=SESenanhygrp");
Serial.println(sequence++);
}
void httpPut(char* url){
if (!client.connect()) {
Serial.println("EXCEPTION: during HTTP PUT. Could not connect");
return;
}
client.print("PUT");
client.print(" ");
client.print(url);
client.println(" HTTP/1.0");
client.println();
while(!client.available()){
delay(1);
}
while(client.available()) {
char c = client.read();
Serial.print(c);
}
while(client.connected()){
Serial.println("Waiting for server to disconnect");
}
client.stop();
}
L'errore si verifica nella seguente segmento
if (!client.connect()) {
Serial.println("EXCEPTION: during HTTP PUT. Could not connect");
return;
}
Nel punto in cui il client non riesce a connettersi, farei due cose: (1) controllare i log del server per qualsiasi prova del server che riceve le richieste di connessione non riuscite; (2) utilizzare 'netstat' sul server per stabilire se le connessioni precedenti sono state chiuse o sospese. – NPE
In aggiunta a sopra, 3) Vorrei controllare se la pila è straripante. 4) C'è una perdita di memoria che si verifica dopo migliaia di cicli. – Jeff
I registri del server non indicano alcun problema. La memoria è sempre un problema quando si utilizza Arduinos, ma il codice sopra dovrebbe essere abbastanza "sicuro per la memoria" – ChrisSSocha