2016-06-27 16 views
0

Ich schreibe WiFi-Server für Arduino (Node MCU).Arduino Wifi-Server erstellt viele Clients und Verbindung verloren

#include <ESP8266WiFi.h> 
#include <WiFiClient.h> 

const char *ssid = "mywifi"; // You will connect your phone to this Access Point 
const char *pw = "qwerty123"; // and this is the password 
IPAddress ip(192, 168, 0, 1); // From RoboRemo app, connect to this IP 
IPAddress netmask(255, 255, 255, 0); 
const int port = 9876; // and this port 

WiFiServer server(port); 
WiFiClient client; 


char cmd[100]; // stores the command chars received from RoboRemo 
int cmdIndex; 
unsigned long lastCmdTime = 60000; 
unsigned long aliveSentTime = 0; 


void setup() { 

    delay(1000); 

    Serial.begin(115200); 

    WiFi.softAPConfig(ip, ip, netmask); // configure ip address for softAP 
    WiFi.softAP(ssid, pw); // configure ssid and password for softAP 

    server.begin(); // start TCP server 

    Serial.println("ESP8266 RC receiver 1.1 powered by RoboRemo"); 
    Serial.println((String)"SSID: " + ssid + " PASS: " + pw); 
    Serial.println((String)"RoboRemo app must connect to " + ip.toString() + ":" + port); 

} 

void loop() { 


    if(!client.connected()) { 
    client = server.available(); 
    return; 
    } 
    Serial.println("new client"); 
    if(client.available()) { 
    char c = (char)client.read(); // read char from client (RoboRemo app) 
    Serial.println((String)c); 
    } 

} 

Wenn ich diesen Server starte, arbeite ich fain. Ich verbinde es normalerweise von meinem Android. Dann öffne ich telnet auf meinem Android und versuche es mit dem Server zu verbinden. Aber auf der Serverseite erstellt viele Clients und nach dem Herstellen der Verbindung verloren.

Wenn ich Server gestartet habe ich dieses Protokoll

SID: mywifi PASS: qwerty123 
RoboRemo app must connect to 192.168.0.1:9876 

Als ich versuchte, von telnet Verbindung zum Server Ich habe dieses Protokoll:

SSID: mywifi PASS: qwerty123 
RoboRemo app must connect to 192.168.0.1:9876 
new client 
new client 
new client 
new client 
new client 
new client 
new client 
new client 
new client 
new client 
new client 
new client 
new client 
new client 
new client 
new client 
new client 
new client 
new client 
new client 
new client 
new client 
new client 
new client 
new client 
new client 
new client 
new client 
new client 
new client 
new client 
new client 
new client 
new client 
new client 

.....

Und auf android telnet Seite Ich habe Fehler:

Error while receive from server: recvfron filed: ECONNRESET (Connection reset by peer) 

Antwort

0

Die new client Ablaufverfolgung ist nicht an der richtigen Stelle, wenn ein Client verbunden ist, wird jede Ausführung von loop es drucken. Dann wird die "neue Client" -Spur sehr oft gedruckt.
Um new client nur zu drucken, wenn Server es bekommen, könnten Sie wie folgt procced:

void loop() { 
    if(!client.connected()) { 
    client = server.available(); 
    if(client.connected()) { 
     Serial.println("new client"); 
    } 
    return; 
    } 
    if(client.available()) { 
    char c = (char)client.read(); // read char from client (RoboRemo app) 
    Serial.println((String)c); 
    } 
}