Объект 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();
}
см. Пример ChatServer для примера WiFiServer