ESP8266 TCP/IP-связь

Итак, я изучаю возможность TCP-связи между 1 чипом ESP8266 (станцией) и 2 ESP8266 (клиентами), подключенными к этой станции. Каждый раз, когда я нахожу код, включающий TCP, он включает только такие вещи, как client.print(). Но как мне написать сообщение на определенный IP-адрес в этой сети?

Когда я выполняю client.print(), он отправляет сообщение ВСЕМ клиентам. Но я хочу иметь возможность делать что-то вроде client1.print() и client2.print()

, 👍0


1 ответ


4

Объект WiFiClient оборачивает TCP-сокет. Обычный TCP-сокет подключен к IP-адресу и порту. WiFiServer запускает прослушивающий сокет на порту. Если к серверу в прослушиваемом сокете обращается сокет удаленного клиента, он создает локальный сокет, соединенный с сокетом удаленного клиента на свободном порту, и возвращает объект WiFiClient, обертывающий сокет. Все, что вы пишете или печатаете на WiFiClient, отправляется в этот удаленный сокет.

Если одна из ваших клиентских плат создает WiFiClient и подключает его к IP-адресу и порту WiFiServer на вашей «серверной» плате, то вы получаете WiFiClient из server.available(), и эти два объекта WiFiClient соединяются. То, что вы пишете/печатаете на одной стороне, вы читаете только из объекта WiFiClient на другой стороне.

клиентский сокет

if (client.connect(serverIP, PORT)) {
  client.print("request\n");
  String response = client.readStringUntil('\n');
  Serial.println(response);
  client.stop();
}

серверная часть

WiFiClient client = server.available();
if (client && client.connected()) {
  String request = client.readStringUntil('\n');
  Serial.println(request);
  client.print("response\n");
  client.stop();
}
,