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

Нужна помощь TCP сервер

Cuper

Member
Написал простенький TCP сервер, который должен передавать 0 или 1. Залил прошивку в esp и решил подключится к серверу через telnet с помощью консоли Windows. Подключение проходит успешно, сервер выдает приветствие клиенту, но тут же клиент отключается.
Потом написал TCP клиент для esp. Залил в другой модуль esp. Та же ситуация, но теперь, он должен читать не только приветствие, а и 0 или 1. А вместо этого выдается какой-то набор рандомных цифр.
Клиент и сервер ниже
Код:
#include <time.h>
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <WiFiServer.h>

bool alreadyConnected = false;
int gpo;
unsigned long seconds;
WiFiServer server(196);

void setup() {
  Serial.begin(115200);
  while (!Serial) {
    delay(10);
  }
  delay(5);
  WiFiinit(); 
  timeSynch();
  server.begin();
  Serial.print(GetTime());
  Serial.println("Wait for first client...");
}
void loop() {
  WiFiClient client = server.available();
  if (client) {
    if (!alreadyConnected) {
      client.flush();
      Serial.print(GetTime());
      Serial.println("We have a new client");
      Serial.print(GetTime());
      client.println("Hello, client!");
      alreadyConnected = true;
    }
  }
  if (client.available() > 0) {
      char thisChar = client.read();
      gpo = digitalRead(2);
      Serial.print(GetTime());
      Serial.print("GPO2 = ");
      Serial.println(gpo);
      server.write(gpo);
   
      Serial.println(thisChar);
  } else if (client.available() < 0) {
      Serial.print(GetTime());
      Serial.println("Lost connection.");
      alreadyConnected = false; 
  } 
  delay(50);
}
Код:
#include "set.h"
int answer;
unsigned long seconds;
WiFiClient client;

void setup() {
 
  delay(100);
  mp3_set_serial (Serial);   
  mp3_set_volume (5);
  delay(100);
  pinMode(0, OUTPUT);
  serialConnect();
  WiFiinit();
  printWifiStatus();
  delay(1000);
  if (client.connect(server, 196)) {
    Serial.println("connected to server");
    return true;
  } else {
    Serial.println("connection failed.");
    return false;
  }
}

void loop() {
  digitalWrite(0, HIGH);
  if (client.available()) {
    answer = client.read();
    Serial.print(answer);
  }
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
   
    if (client.connect(server, 196)) {
    Serial.println("connected to server");
    return true;
  } else {
    Serial.println("connection failed.");
    return false;
  }
 
  }
  if (answer == 0) alert();
  delay(50);
}
 

Алексей.

Active member
А чему вы удивляетесь?
В примере сервера в функции loop(), вы у сервера получаете клиента (вызов WiFiClient client = server.available() ), сохраняете его в стеке, вычитываете данные если они есть (а у вас их нет, просто подключились телнетом и ничего не передали) и через delay(50) завершаете функцию loop() и тот клиент, который построили в стеке благополучно (вполне штатно) закрывается, со стороны телнета видите вроде соединение установилось и тут же разорвалось.
 
Сверху Снизу