• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь как правильно закрывать соедиенние с клиентом?

Atom

Member
Пытаюсь сделать обработку запросов от клинетов по определенному порту

Код:
    if (mqttTCPServer->hasClient()) {

      if (!mqttClient || !mqttClient.connected()) {

        if (mqttClient) {

          mqttClient.stop();
          Serial.printf(c_s_ClientStop, c_mqtt_client);
        }
        mqttClient = mqttTCPServer->available();
        Serial.printf(c_s_ClientNew, c_mqtt_client);
        mqttClient.flush();  // clear input buffer, else you get strange characters
      }
    }
    delay(0);
    packet_mqtt_size = 0;
    while (mqttClient.available()) { // get data from Client

      packet_mqtt_size = mqttClient.read((uint8_t*)packet_mqtt_buffer, _MQTT_BUFF_MAX_SIZE - 1);
//      Serial.printf("Size:%d\r\n", packet_mqtt_size);
      packet_mqtt_buffer[packet_mqtt_size] = 0;
      //Serial.printf(c_s_ClientStop, c_mqtt_client);
//      Serial.println(packet_mqtt_buffer);
      if ((packet_mqtt_size > 0)) {
       
        if (parseBuff()){
       

            delay(0);
          mqtt_execute2(sec_valid_cnt);
            Serial.println("out exec");
            delay(0);
        }
          
      }
      delay(0);
      mqttClient.write((char*)packet_mqtt_buffer, packet_mqtt_size);
      mqttClient.stop();
      delay(0);
    }
Для теста использую netcat. при первом обращении происходит все правильно : сервер выдает ответ и разрывает соединение. При повторном обращении (даже не изменив ни байта в строке). Происходит разрыв соединения без вывода ответа. При третьем соединении просто виснет.


Мои подозрения на то, что я не правильно делаю разрыв соединения клиента и что то где то подвисает. Кто нибудь может что либо прокомментировать?
 
Сверху Снизу