Здравствуйте! Пытаюсь связать ESP32 по вебсокету с сервером, написанном на C#. ESP32 рвет связь с сервером каждую минуту. Все очень тестовое, ибо с этой-то проблемой никак не разберусь.
Сервер написан на C# с помощью библиотеки WebSocketSharp.
Код сервера
using System;
using WebSocketSharp;
using WebSocketSharp.Server;
namespace ESP32_websocket_server
{
class Server
{
static WebSocketServer server;
public class Echo : WebSocketBehavior
{
public Echo()
{
Protocol = "arduino";
IgnoreExtensions = true;
}
protected override void OnMessage(MessageEventArgs e)
{
if (string.IsNullOrEmpty(e.Data)) return;
Console.WriteLine("[" + DateTime.Now.ToString() + "] Получено от клиента: " + e.Data);
Send(e.Data);
}
}
static void Main(string[] args)
{
string address = "ws://192.168.*.*:*";
server = new WebSocketServer(address);
server.Start();
server.AddWebSocketService<Echo>("/");
Console.WriteLine("Сервер запущен на " + address + "/");
Console.ReadKey();
server.Stop();
}
}
}
Код клиента на ESP32
#include <WiFi.h>
#include <WebServer.h>
#include <WebSocketsClient.h>
const char* ssid = "***";
const char* password = "***";
WebSocketsClient webSocket;
void webSocketEvent(WStype_t type, uint8_t * payload, size_t length) {
switch (type)
{
case WStype_DISCONNECTED:
Serial.println("Socket Disconnected!");
delay(2000);
break;
case WStype_CONNECTED:
Serial.println("[WSc] Connected to webSocket");
webSocket.sendTXT("Connected");
delay(2000);
break;
case WStype_TEXT:
Serial.print("[WSc] get text: ");
Serial.println("Event");
webSocket.sendTXT("Event");
delay(2000);
break;
case WStype_BIN:
case WStype_ERROR:
case WStype_FRAGMENT_TEXT_START:
case WStype_FRAGMENT_BIN_START:
case WStype_FRAGMENT:
case WStype_FRAGMENT_FIN:
break;
}
}
void setup()
{
Serial.begin(115200);
delay(5000);
//Подключаемся к WiFi
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
Serial.println('.');
delay(1000);
}
Serial.println("WiFi Connected!!!");
Serial.println(WiFi.localIP());
//Подключаемся к сокету
webSocket.begin("192.168.*.*", *, "/");
webSocket.onEvent(webSocketEvent);
webSocket.setReconnectInterval(1000);
}
void loop() {
webSocket.loop();
Serial.println("Loop");
webSocket.sendTXT("Loop");
}
При обмене данными происходит разрыв с сервером ровно через 1 минуту. Я немного обезопасилась, чтобы не нервничать, видя как сервер падает в ошибку, и в библиотеке WebSocketSharp в файле Ext.cs в функции ReadBytesAsync временно добавила строку
if (!stream.CanRead) return;
потому что при разрыве соединения поток существует, но в нем ничего нет.
Вывод при обмене данными
Сервер запущен на ws://192.168.*.*:*/
[15.03.2023 15:14:36] Получено от клиента: Connected
[15.03.2023 15:14:38] Получено от клиента: Loop
[15.03.2023 15:14:38] Получено от клиента: Event
[15.03.2023 15:14:40] Получено от клиента: Loop
[15.03.2023 15:14:40] Получено от клиента: Event
[15.03.2023 15:14:42] Получено от клиента: Loop
[15.03.2023 15:14:42] Получено от клиента: Event
[15.03.2023 15:14:44] Получено от клиента: Loop
[15.03.2023 15:14:44] Получено от клиента: Event
[15.03.2023 15:14:46] Получено от клиента: Loop
[15.03.2023 15:14:46] Получено от клиента: Event
[15.03.2023 15:14:48] Получено от клиента: Loop
[15.03.2023 15:14:48] Получено от клиента: Event
[15.03.2023 15:14:50] Получено от клиента: Loop
[15.03.2023 15:14:50] Получено от клиента: Event
[15.03.2023 15:14:52] Получено от клиента: Loop
[15.03.2023 15:14:52] Получено от клиента: Event
[15.03.2023 15:14:54] Получено от клиента: Loop
[15.03.2023 15:14:54] Получено от клиента: Event
[15.03.2023 15:14:56] Получено от клиента: Loop
[15.03.2023 15:14:56] Получено от клиента: Event
[15.03.2023 15:14:58] Получено от клиента: Loop
[15.03.2023 15:14:58] Получено от клиента: Event
[15.03.2023 15:15:00] Получено от клиента: Loop
[15.03.2023 15:15:00] Получено от клиента: Event
[15.03.2023 15:15:02] Получено от клиента: Loop
[15.03.2023 15:15:02] Получено от клиента: Event
[15.03.2023 15:15:04] Получено от клиента: Loop
[15.03.2023 15:15:04] Получено от клиента: Event
[15.03.2023 15:15:06] Получено от клиента: Loop
[15.03.2023 15:15:06] Получено от клиента: Event
[15.03.2023 15:15:08] Получено от клиента: Loop
[15.03.2023 15:15:08] Получено от клиента: Event
[15.03.2023 15:15:10] Получено от клиента: Loop
[15.03.2023 15:15:10] Получено от клиента: Event
[15.03.2023 15:15:12] Получено от клиента: Loop
[15.03.2023 15:15:12] Получено от клиента: Event
[15.03.2023 15:15:14] Получено от клиента: Loop
[15.03.2023 15:15:14] Получено от клиента: Event
[15.03.2023 15:15:16] Получено от клиента: Loop
[15.03.2023 15:15:16] Получено от клиента: Event
[15.03.2023 15:15:18] Получено от клиента: Loop
[15.03.2023 15:15:18] Получено от клиента: Event
[15.03.2023 15:15:20] Получено от клиента: Loop
[15.03.2023 15:15:20] Получено от клиента: Event
[15.03.2023 15:15:22] Получено от клиента: Loop
[15.03.2023 15:15:22] Получено от клиента: Event
[15.03.2023 15:15:24] Получено от клиента: Loop
[15.03.2023 15:15:24] Получено от клиента: Event
[15.03.2023 15:15:26] Получено от клиента: Loop
[15.03.2023 15:15:26] Получено от клиента: Event
[15.03.2023 15:15:28] Получено от клиента: Loop
[15.03.2023 15:15:28] Получено от клиента: Event
[15.03.2023 15:15:30] Получено от клиента: Loop
[15.03.2023 15:15:30] Получено от клиента: Event
[15.03.2023 15:15:32] Получено от клиента: Loop
[15.03.2023 15:15:32] Получено от клиента: Event
[15.03.2023 15:15:34] Получено от клиента: Loop
[15.03.2023 15:15:34] Получено от клиента: Event
[15.03.2023 15:15:36] Получено от клиента: Loop
[15.03.2023 15:15:36] Получено от клиента: Event
[15.03.2023 15:15:42] Получено от клиента: Connected
[15.03.2023 15:15:44] Получено от клиента: Loop
[15.03.2023 15:15:44] Получено от клиента: Event
[15.03.2023 15:15:46] Получено от клиента: Loop
[15.03.2023 15:15:46] Получено от клиента: Event
[15.03.2023 15:15:48] Получено от клиента: Loop
[15.03.2023 15:15:48] Получено от клиента: Event
[15.03.2023 15:15:50] Получено от клиента: Loop
[15.03.2023 15:15:50] Получено от клиента: Event
[15.03.2023 15:15:52] Получено от клиента: Loop
[15.03.2023 15:15:52] Получено от клиента: Event
[15.03.2023 15:15:54] Получено от клиента: Loop
[15.03.2023 15:15:54] Получено от клиента: Event
[15.03.2023 15:15:56] Получено от клиента: Loop
В выводе выше, на 62-й строке разрывается связь и ESP32 подключается снова.
Подскажите, что я делаю не так, в чем моя ошибка? Может что-то проверить еще нужно? Могут быть с сетью какие-то проблемы?