使用 esp8266,我试图实现一个简单的 TPC 服务器,以便能够作为客户端与另一个 esp8266 进行
通信,最初通信有效,但我有两个问题:
1.-我如何获得告诉我的标志的值如果客户端已连接或已断开连接
2.- 正如我一开始所说,通信运行正常,但如果我在客户端断电,服务器会冻结并且不再接收任何数据,我必须重新启动服务器再次运行,这是不可接受的
这是我的服务器代码:
代码:
全选#include
#include
#define SERIALBAUD 115200
#define MAXCLIENTS 4
const char* ServerSSID = "**********";
const char* ServerPassword = "*********";
int i;
const int LED_PIN = 2;
unsigned int localPort = 8888;
WiFiServer server(localPort);
WiFiClient serverClients[MAXCLIENTS];
bool flagConexionWiFi;
String bufferStringClienteWIFI = "";
void checkIfServerIsConnectec() {
if (server.hasClient()) { //check if there are any new clients
for (i = 0; i < MAXCLIENTS; i++) {
if (!serverClients && !serverClients.connected()) { //find free/disconnected spot
if (serverClients)
serverClients.stop();
serverClients = server.available();
flagConexionWiFi = true;
Serial.println("[DB] Conectado");
continue;
}
else {
flagConexionWiFi = false;
Serial.println("[DB] Sin Conexion");
}
}
WiFiClient serverClient = server.available();
serverClient.stop();
}
}
void checkDataOfClientWiFi() {
for (i = 0; i < MAXCLIENTS; i++) {
if (serverClients && serverClients.connected()) {
if (serverClients.available()) {
digitalWrite(LED_PIN, LOW);
while (serverClients.available()) {
bufferStringClienteWIFI.concat((char) serverClients.read());
}
}
digitalWrite(LED_PIN, HIGH);
}
}
}
void setup() {
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, HIGH);
Serial.begin(SERIALBAUD);
bufferStringClienteWIFI.reserve(100);
bufferStringClienteWIFI = "";
WiFi.disconnect(true);
WiFi.mode(WIFI_AP);
WiFi.softAP(ServerSSID, ServerPassword);
server.begin();
server.setNoDelay(true);
Serial.println(); Serial.println();
Serial.print("ESP ready, Server IP:");
Serial.print(WiFi.softAPIP());
Serial.print(" Port:");
Serial.println(localPort);
}
void loop() {
checkIfServerIsConnectec();
checkDataOfClientWiFi();
digitalWrite(LED_PIN, HIGH);
if (bufferStringClienteWIFI != NULL) {
Serial.print(bufferStringClienteWIFI);
bufferStringClienteWIFI = "";
}
delay(1000);
}