Maintien d'une connexion avec l'objet WifiClient

Bonjour à tous et merci d'avance de votre aide

Je réalise un serveur Modbus TCP sur un Wemos D1 (ESP8266).
J'utilise un objet WifiServer car le système doit être joignable en wifi. J'arrive à envoyer de trames Modbus sur le D1 mais à chaque trame envoyée (sur le port 502) le serveur déconnecte le client (objet WifiClient).
Or, en Modbus TCP, c'est le client qui se déconnecte et pas le serveur !
Donc la question est très simple, comment "dire" à l'objet WifiServer de maintenir la connexion. Si tant est que cela soit possible.
Avant de poster sur ce forum j'ai pas mal fouillé mai je n'ai rien trouvé. Je me demande même si c'est possible.

Merci de vos réponses.

LS

bonjour,
si tu mettais un code entre balise code et des liens.
ca serait utile pour répondre

ca ne serait pas ca que tu cherche?

When using Modbus IP the transport protocol is TCP (port 502) and, by default, the connection is terminated to each transmitted message, that is, is not a keep-alive type connection. If you need a TCP keep-alive connection you have to remove comments of this line in ModbusIP.h header (or ModbusIP_* headers):

#define TCP_KEEP_ALIVE

Bonjour InfoBarkee

Super ! Merci de votre réponse. Ca me plait bien ce "TCP_KEEP_ALIVE"
Je vais voir un peu comment il a fait dans son code
Je vous tiens au courant.

Encore merci !

LS

Bon,

Je viens de vérifier, la lib en question c’est pour de l’ethernet via un shield ethernet. Le gars qui à développé cette lib en a développé une autre pour de l’ESP8266 mais il stipule bien que la comm est coupée à chaque réception de trame !

Voila le petit bout de code que j’utilise (prière de ne pas se moquer !):
En fait je crée 2 serveurs un pour le modbus et un pour le web.

...


#include <ESP8266WiFi.h>

....

// Création d'un objet serveur sur le port 502 (Modbus TCP)
WiFiServer serverModbus(502);
WiFiServer serverWeb(80);

void setup() {
  Serial.begin(115200);
  delay(10);
  
  // Connexion à la box...
  Serial.println();
  Serial.println();
  Serial.println("-----------------------");
  Serial.print("Cnx au reseau Wifi (");
  Serial.print(ssid);
  Serial.println(")");
  
  // connexion
  WiFi.begin(ssid, password);
  
  // Attente connexion effective
  while (WiFi.status() != WL_CONNECTED) 
    {
      delay(500);
      Serial.print(".");
    }
    
   // OK connexion établie
   Serial.println("");
   Serial.println("Cnx Wifi OK!");
   Serial.println("-----------------------");

  
  // Demarrage serveurs
  serverModbus.begin();
  Serial.println("Server Mosbus actif"); 
  serverWeb.begin();  
  Serial.println("Server Web actif"); 


  // Affiche l'IP local en 192.168...
  Serial.print("IP locale : ");
  Serial.println(WiFi.localIP());
  Serial.println("-----------------------");  
}


void loop() {

  // Verif si donnée recues
  WiFiClient clientModbus = serverModbus.available(); 
  WiFiClient clientWeb = serverWeb.available();  
  
  // Délais max pour fin de trame
  clientModbus.setTimeout(10);
  clientWeb.setTimeout(200); 
  
  // Verif si connexion Modbus (prioritaire)
  if (!clientModbus) 
    {
      // Pas de requete client,
    }
  else
    {
      // Connexion d'un client Modbus!
      // Traitement requete Modbus
      // Attente reception requete client
      Serial.println("Nouvelle connexion!");
      while(!clientModbus.available())  {delay(1);}
    
      // OK toute la trame recue
      Serial.print("RX: ");
      
      // Lecture de la requete recue
      String ReqModbus = clientModbus.readString();
     
      // longeur de la rqt
      int Lenrqt = ReqModbus.length();
      byte L;
      if (Lenrqt > MaxLenRqt){L = MaxLenRqt;} else { L = Lenrqt;}
         
      // convertie la string dans un table de bytes
      for (byte i=0; i<L; i++)
        {
          RqtRx[i]=byte(ReqModbus.charAt(i));
          Serial.print (RqtRx[i], HEX);
          if (i!=L-1) {Serial.print ("-");}
        }
      Serial.print (" (");
      Serial.print (L);
      Serial.println ( ")");
      
      // Traitement de la requete
      TraitementRqtModbus();
    
      // vidage tempon requete
      clientModbus.flush();
      Serial.println("-----------------------"); 
      
    }

Je n’ai mis que les parties intéressantes du code.
Merci de votre aide
LS