I am a bit of a newbee on this but I have managed this ESP8266 socket server used to publish AIS/GPS data on my boat-network. This cannot serve multiple clients. Clients do not send anything. Just receiving the data on port 8888. How can I sent this data to more (2) clients?
#include "ESP8266WiFi.h"
int port = 8888; //Port number
WiFiServer server(port);
String newHostname = "AISnode";
void setup() {
Serial.begin(38400);
GetSSID();
delay(2000);
WiFi.hostname("NodeMCU");
WiFi.mode(WIFI_STA);
WiFi.begin(ConSSID, PassWord); //Connect to wifi
while (WiFi.status() != WL_CONNECTED)
{
delay(1000);
}
server.begin();
}
void loop()
{
WiFiClient client = server.available();
while (client.connected())
{
while (client.available() > 0)
{
// read data from the connected client
Serial.write(client.read());
}
//Send Data to connected client
while (Serial.available() > 0)
{
//client.write('connected');
client.write(Serial.read());
}
}
}
Aad Bloem is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
1
Problem solved, thanks. TCP clients stored in an array:
{
uint8_t i;
//check if there are any new clients
if (server.hasClient()) {
// new incoming connection detected
for (i = 0; i < MAX_SRV_CLIENTS; i++) {
//find free/disconnected array place
if (serverClients[i].connected()) {
if (debug) {
Serial.print(i);
Serial.println(" is connected");
//Serial.println(serverClients[i].status());
}
}
else
{
// listen for incoming clients
serverClients[i] = server.accept();
if (serverClients[i].connected()) {
if (debug) {
Serial.print(i);
Serial.println(" is NEW client");
}
break;
}
}
}
}
//check clients for data
for (i = 0; i < MAX_SRV_CLIENTS; i++) {
if (serverClients[i] && serverClients[i].connected()) {
if (serverClients[i].available()) {
//get data from the telnet client and push it to the UART*
while (serverClients[i].available()) Serial.write(serverClients[i].read());
}
}
}
//check SERIAL for data
if (Serial.available()) {
size_t len = Serial.available();
uint8_t sbuf[len];
Serial.readBytes(sbuf, len);
//push Serial AIS data to all connected clients
for (i = 0; i < MAX_SRV_CLIENTS; i++) {
// if (serverClients[i] && serverClients[i].connected()) {
if (serverClients[i].connected()) {
serverClients[i].write(sbuf, len);
}
}
}
}
Aad Bloem is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.