Создаю простой телнет сервер. Задача сервера - получить данные от одного клиента и передать другому по wifi. Все работает, если посылка небольшая. Устроил стресс-тест и закинул в сокет пару килобайт - еспшка отрубила вайфай да и вообще тупанула. 2Kb пришло другому клиенту не полностью. Подозрение на нехватку памяти, но как новичок в программировании esp не знаю как и где это увидеть? Или какое-то ограничение на размер пакета? Подскажите, дайте ссылку. Спасибо! И вот мой скетч (не оптимизированый, так что сорян):
Код:
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress local_IP(192, 168, 4, 22);
IPAddress gateway(192, 168, 4, 9);
IPAddress subnet(255, 255, 255, 0);
#define MAX_SRV_CLIENTS 5
WiFiServer server(23);
WiFiClient serverClients[MAX_SRV_CLIENTS];
void setup()
{
Serial.begin(115200);
WiFi.mode(WIFI_AP);
Serial.print("Setting soft-AP configuration ... ");
Serial.println(WiFi.softAPConfig(local_IP, gateway, subnet) ? "Ready" : "Failed!");
Serial.print("Setting soft-AP ... ");
Serial.println(WiFi.softAP("ZAZ", "123456789") ? "Ready" : "Failed!");
Serial.print("Soft-AP IP address = ");
Serial.println(WiFi.softAPIP());
server.begin();
server.setNoDelay(true);
}
void loop()
{
uint8_t i;
if (server.hasClient()) {
for (i = 0; i < MAX_SRV_CLIENTS; i++) {
if (!serverClients[i] || !serverClients[i].connected()) {
if (serverClients[i]) serverClients[i].stop();
serverClients[i] = server.available();
Serial1.print("New client: "); Serial1.print(i);
continue;
}
}
WiFiClient serverClient = server.available();
serverClient.stop();
}
for (i = 0; i < MAX_SRV_CLIENTS; i++) {
if (serverClients[i] && serverClients[i].connected()) {
if (serverClients[i].available()) {
while (serverClients[i].available())
{
size_t len = serverClients[i].available(); //смотрим кол-во данных, создаем буфер
uint8_t sbuf[len];
serverClients[i].readBytes(sbuf, len);
uint8_t sbuf2[len + 3];// еще буфер - добавляем номер клиента, чтоб на чат было похоже
sprintf((char *)sbuf2, "%i: %s", i, sbuf);
for (int j = 0; j < MAX_SRV_CLIENTS; j++) {//рассылаем всем посылку
if (serverClients[j] && serverClients[j].connected()) {
serverClients[j].write(sbuf2, len+3);
delay(1);
}
}
}
}
}
}
}