乐鑫技术交流
直播中

卓侨汉

7年用户 1034经验值
擅长:MEMS/传感技术
私信 关注
[问答]

esp8266在与客户端失去连接时死机了怎么解决?

使用 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);
}

                                       
               

更多回帖

发帖
×
20
完善资料,
赚取积分