Client.available ne renvoie rien?

Bonjour a tous ,
je me permet de revenir vers vous car je sèche sur une fonction qui a l'air toute simple mais je n'arrive pas a la faire fonctionné correctement. tout d'abord voici mon code :

while (! client.connect(ipaddr, port)){
      Serial.println("Tentative de connection au Serveur n°"+  String(compteurwifi++ +1) +"=>fail");
    if (compteurwifi==3){
     break;
    }
   
 }
 //on verifie si on est connecté ou pas 
 if (compteurwifi==3){
      compteurwifi=0;
      Serial.println("pas de connection au Serveur");
    }
else{                                                                                       //si on est connecté on envoie au serveur
Serial.println("connecté au Serveur");

  client.print("toutou@@@totor@@@toto@@@tata\r");

             while(client.available()){      
               String line = client.readStringUntil('\r');
               Serial.print(line);
             }

    
        Serial.println();
        Serial.println(F("Connexion fermee"));
  if (!client.connected()) {
    Serial.println("disconnecting.");
    client.stop();
  }
  client.flush();
    client.stop();
  delay(100);

le client.print(.... ) fonctionne parfaitement je le reçoit sur mon serveur à ce moment le serveur envoie ca réponse mais Client.available ne reçoit jamais rien (alors que le serveur envoie bien la réponse car j'ai testé en telnet). Pouvais m'éclairé sur la subtilité que je ne comprend pas.

Ce n'est pas ton code, c'est juste un morceau de code. Mais on ne sait pas sur quelle carte il doit tourner, ni comment tout est défini (variables, bibliothèques), donc pas possible de répondre...

oui il est vrai que j'avais mis qu'une partie du code pour que ce soit plus lisible désoler je pensé que cela aurait suffit.....ci dessous le code complet qui tourne sur un esp32:

//#include "WiFi.h"
#include <WiFi.h>
#include <Preferences.h>
#include <AM2320.h>
#include <Arduino.h> 
WiFiClient client;
Preferences preferences;
AM2320 th(&Wire);

#define ADC_PIN             34
#define uS_TO_S_FACTOR 1000000
bool modeparametrage=0;
const int boutonparametrage=15;
String msg = "  ";
int vref = 1100;
int compteurwifi=0;
float temptemp=0;
String wifitemp="";
String mdptemp="";
double temppause=10000000 ;

float showVoltage(){
        uint16_t v = analogRead(ADC_PIN);
        float battery_voltage = ((float)v / 4095.0) * 2.0 * 3.3 * (vref / 1000.0);
        return battery_voltage;
}

void setup(void) {
  Wire.begin();
  Serial.begin(115200);
  pinMode(boutonparametrage, INPUT_PULLUP);
  preferences.begin("myfile", false);
  String wifitemp = preferences.getString("nomwifi","non trouvé");
  String mdptemp=preferences.getString("mdpwifi","non trouvé");
  temppause=preferences.getULong("temppause",1);
  Serial.println("Temp de pause="+String(temppause*uS_TO_S_FACTOR)+"µs");

  preferences.end();
  #define WIFI_SSID wifitemp.c_str()
  #define WIFI_PASSWORD mdptemp.c_str()
  Serial.print("SSID=");
    Serial.println(WIFI_SSID);
   Serial.print("PSW=");
  Serial.println(WIFI_PASSWORD);
   
  if (digitalRead(boutonparametrage) == LOW) {
        // mise en mode parametrage jusqu'au prochain démarrage
        modeparametrage=1;
        Serial.println("Mode parametrage");
  } else {
  //connection au wifi
  WiFi.setHostname("Capteur temperature 1");
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  while (WiFi.status() != WL_CONNECTED)  {
     ++compteurwifi;
     Serial.print(".");
    if (compteurwifi>30){
      break;
    }
    delay(200);
  }
  Serial.println(".");
  if(WiFi.status() == WL_CONNECTED){                                                        //Si on est connecté on imprime les info tcp
    Serial.println("Connecté au WIFI: "+String(WIFI_SSID));
    Serial.println("Mode parametrage= "+String(modeparametrage));
    Serial.print("mon ip=");
    Serial.println(WiFi.localIP());
    Serial.println("mon nom machine="+String(WiFi.getHostname()));
    Serial.println("Adresse MAC= "+WiFi.macAddress());
}
}   
}

void loop() {

  
  temptemp=showVoltage();
if (modeparametrage==0) {                                     //si on est en mode parametrage on ne fait pas de lecture de température 
switch(th.Read()) {

case 2:
  //tft.println(" CRC failed");
break;

case 1:
  //tft.println(" Sensor offline");
break;

case 0:
//chargement des info du serveur a contacter
preferences.begin("myfile", false);
byte toto1=preferences.getUChar("IP1",192);
byte toto2=preferences.getUChar("IP2",168);
byte toto3=preferences.getUChar("IP3",0);
byte toto4=preferences.getUChar("IP4",0);
int port=preferences.getUInt("port",0);

IPAddress ipaddr(toto1, toto2, toto3, toto4);
preferences.end();
Serial.print("Adresse et Port du serveur=");
Serial.print(ipaddr);
Serial.println("/"+String(port));
compteurwifi=0;

 while (! client.connect(ipaddr, port)){
      Serial.println("Tentative de connection au Serveur n°"+  String(compteurwifi++ +1) +"=>fail");
    if (compteurwifi==3){
     break;
    }
   
 }
 //on verifie si on est connecté ou pas 
 if (compteurwifi==3){
      compteurwifi=0;
      Serial.println("pas de connection au Serveur");
    }
else{                                                                                       //si on est connecté on envoie au serveur
Serial.println("connecté au Serveur");
Serial.println("Transfert de => Adresse Mac="+WiFi.macAddress()+" Temperature="+(th.cTemp+0.4)+"°C Humidité="+th.Humidity+"% Tension="+String(temptemp)+"V\r");
  client.print(WiFi.macAddress()+"@@@"+(th.cTemp+0.4)+"@@@"+th.Humidity+"@@@"+String(temptemp)+"\r");
     
       while(client.available()){      //le port série
       String line = client.readStringUntil('\r');
        Serial.print(line);
      }
        Serial.println();
        Serial.println(F("Connexion fermee"));
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
    for(;;)
      ;
  }

  client.flush();
   client.stop();
  delay(100);
}

 Serial.println("mise en sommeil");
  esp_sleep_enable_timer_wakeup(temppause*uS_TO_S_FACTOR);
  esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_OFF);
  esp_deep_sleep_start();
break;
}

} ////fin du mode parametrage


if (Serial.available() ) 
{ 
msg = Serial.readString(); //Stocke le message sous forme de String dans msg
int longueur=msg.length(); //On calcul la longueur
 msg=msg.substring(0,longueur-2);
//Serial.println(msg); //Puis votre message

////enregistre le SSID
if (msg.indexOf("@wifi")>0){
preferences.begin("myfile", false);
preferences.putString("nomwifi",msg.substring(6));//
preferences.end();
Serial.print(msg.substring(6));
Serial.println("=>OK");
}

///demande du SSID
if (msg.indexOf("@?wifi")>0){
preferences.begin("myfile", false);
Serial.println(preferences.getString("nomwifi","non trouvé"));
preferences.end();

}

//Mots de passe du wifi
if (msg.indexOf("@mdp")>0){
preferences.begin("myfile", false);
preferences.putString("mdpwifi",msg.substring(5));//
preferences.end();
Serial.print(msg.substring(5));
Serial.println("=>OK");
}
if (msg.indexOf("@?mdp")>0){
preferences.begin("myfile", false);
Serial.println(preferences.getString("mdpwifi","non trouvé"));
preferences.end();
}

//temp de pause du µc entre deux envoie de données
if (msg.indexOf("@temppause")>0){
String tempmsg=msg.substring(11);
preferences.begin("myfile", false);
preferences.putULong("temppause",atol(tempmsg.c_str()));//
preferences.end();
temppause=atol(tempmsg.c_str())*1000000;
Serial.println("=>OK");
}
if (msg.indexOf("@?temppause")>0){
preferences.begin("myfile", false);
Serial.println(preferences.getULong("temppause",0));
preferences.end();
}

//reponse a l'intérogation de l'adresse du mac du capteur
if (msg.indexOf("@?mac")>0){
Serial.println(WiFi.macAddress());
}


//Enregistrement de l'adresse du serveur
if (msg.indexOf("@serveur")>0){
String tempip=msg.substring(9);
preferences.begin("myfile", false);
String test=tempip.substring(0,3);
int tretre=test.toInt();
preferences.putUChar("IP1",tretre);
test=tempip.substring(3,6);
tretre=test.toInt();
preferences.putUChar("IP2",tretre);
test=tempip.substring(6,9);
tretre=test.toInt();
preferences.putUChar("IP3",tretre);
test=tempip.substring(9,12);
tretre=test.toInt();
preferences.putUChar("IP4",tretre);
preferences.end();
Serial.print(tempip);
Serial.println("=>OK");
}

//reponse a l'intérogation de l'adresse du serveur
if (msg.indexOf("@?serveur")>0){
preferences.begin("myfile", false);
Serial.print(preferences.getUChar("IP1",192));
Serial.print(".");
Serial.print(preferences.getUChar("IP2",168));
Serial.print(".");
Serial.print(preferences.getUChar("IP3",0));
Serial.print(".");
Serial.print(preferences.getUChar("IP4",0));
preferences.end();
}

if (msg.indexOf("@port")>0){
String tempmsg=msg.substring(6);
preferences.begin("myfile", false);
preferences.putUInt("port",tempmsg.toInt());//
preferences.end();
Serial.print(tempmsg.toInt());
Serial.println("=OK");
}
if (msg.indexOf("@?port")>0){
preferences.begin("myfile", false);
Serial.println(preferences.getUInt("port",0));
preferences.end();
}

if (msg.indexOf("@start")>0){
modeparametrage=0;
}

}
}

Je bloque toujours je comprend pas pourquoi le client.available() ne vaut toujours rien!!!!!!!!

Le port TCP à 0, c'est pas bon du tout du tout. Le port zéro est une valeur spéciale, aucun serveur ne peut se présenter sur le port 0.
https://fr.wikipedia.org/wiki/Liste_de_ports_logiciels
Si c'est un serveur HTTP généralement c'est le port 80.

ah, aussi, fait Control-T ou Pomme-T dans l'IDE pour indenter correctement ton code.

bonjour le port n'est pas a 0 .Le port est a 2002

ha est merci beaucoup pour l'astuce ctrl + t je connaissait pas effectivement beaucoup mieux

le port est précharger avec la valeur en mémoire ici "2002"

int port=preferences.getUInt("port",0);

Bonjour, help please....

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.