J'utilise un Arduino Uno avec Ethernet Shield.La connexion du client Ethernet Arduino (Uno) échoue après plusieurs impressions du client
Après l'envoi de nombreuses requêtes HTTP, client.println (...), le client commence à échouer lors de la connexion. Le délai d'échec semble être aléatoire, et la lecture de la séquence de la boucle peut varier entre ~ 1000 et ~ 7000.
L'erreur est de ne pas faire avec le débordement Ethernet de transmission tampon (à la suite this advice)
Voici le code qui échoue:
#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'erreur se produit dans le segment suivant
if (!client.connect()) {
Serial.println("EXCEPTION: during HTTP PUT. Could not connect");
return;
}
Au moment où le client ne parvient pas à se connecter, je ferais deux choses: (1) vérifier les logs du serveur pour toute preuve du serveur recevant les demandes de connexion défaillantes; (2) utilisez 'netstat' sur le serveur pour déterminer si les connexions précédentes ont été fermées ou sont en attente. – NPE
En plus de ce qui précède, 3) Je vérifierais si la pile déborde. 4) Y at-il une fuite de mémoire qui se produit après des milliers de cycles. – Jeff
Les journaux du serveur n'ont indiqué aucun problème. La mémoire est toujours un problème lors de l'utilisation d'Arduinos, mais le code ci-dessus devrait être tout à fait «sans danger pour la mémoire» – ChrisSSocha