- fchao-Sinus-Wechselrichter AliExpress         
Seite 7 von 10 ErsteErste ... 56789 ... LetzteLetzte
Ergebnis 61 bis 70 von 97

Thema: esp8266, Arduino IDE: neuer Versuch: warum wird website sofort beendet?

  1. #61
    HaWe
    Gast
    Anzeige

    Powerstation Test
    KORREKTUR !!

    update:

    ich hatte noch das alte
    Code:
            while(client.connected()) { 
              delay(10);    
            }
    vor dem client.close() mit drin, aber nun rausgelöscht....:


    UND JETZT schaltet er korrekt nach dem 1. Enter/Button Click durch!

    4x nachgetestet, nach Neustart und zwischen-Abort, immer ok!

    Ich verneige mich - und werde es jetzt noch über ein paar Stunden weiter testen+beobachten!

    Tausend Dank!

  2. #62
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.645
    Hä?

    Verstehe ich nicht. Wo hattest Du client.close() drinnen?
    Wie sieht der Code jetzt aus, wo es funktioniert?


    MfG

  3. #63
    HaWe
    Gast
    äh, sorry, vor
    // close the connection:
    client.stop();

    der "echte" ungekürzte Code ist dieser hier:

    Code:
    
    void handleNotAuthorized() {
      String readString = "";
      char   strinput[MAXLEN], strupwd[TOKLEN], struname[TOKLEN] ;
      
      WiFiClient client = wifiserver.available();
    
      strcpy(strinput, "");
      strcpy(strupwd, "");
      strcpy(struname, "");
    
    
      while ( client.connected() ) {
        if (authorized) return;
    
    
        if ( client.available() ) {
          char c = client.read();
    
    
          //read char by request
          readString = "";
          while ( (readString.length() < TOKLEN) && (c != '\n') ) {
              readString += c;
              c = client.read();
          }
     
          if(strstr(website_upwd,strupwd)!=NULL & strstr(website_uname,struname)!=NULL)
          
          readString.toCharArray(strinput, MAXLEN);
          // cstringarg( char* haystack, char* vname, char* sarg )
          // haystack pattern: &varname=1234abc,  delimiters &, \n, \0, SPACE, EOF
          cstringarg(strinput, "uname", struname);  // uname
          cstringarg(strinput, "upwd", strupwd);   // upwd
          
          // debug
          Serial.print("strupwd     >>>"); Serial.print(strupwd); Serial.println("<<<");
          Serial.print("website_upwd>>>"); Serial.print(website_upwd); Serial.println("<<<");
          Serial.print("readString>>>");Serial.println(readString);
    
          if ( (strlen(strupwd)==strlen(website_upwd)) && (strcmp(website_upwd, strupwd)==0)
              && (strlen(struname)==strlen(website_uname)) && (strcmp(website_uname, struname)==0) 
             )         
          {
            authorized = true;
            readString = "";
            return;           
          }    
          
          //if HTTP request has ended
          if (c == '\n') {
             client.flush();
    
            //now output html data header
            String script="";
            script += ("<!DOCTYPE html> \n");
            script += ("<html> \n");
            
            script += ("<head> \n");
    
            // utf-8 für "°" Zeichen
            script +=  "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"> \n" ;
            script +=  "<title>" ;        
            script +=  "</title> \n" ;
            script +=  "</head> \n" ;
            script +=  "<body> \n" ;
            
            script += ("<h2><p style=\"color:rgb(255,0,191);\"> log in to proceed: </p> </h2> \n");
    
            script += ("<FORM ACTION='/' method=GET > \n");
            script += ("<h2>user name:  <INPUT TYPE=text NAME='uname' VALUE=''  MAXLENGTH='50'> </h2> \n");
            script += ("<h2>password :  <INPUT TYPE=PASSWORD NAME='upwd' VALUE='' MAXLENGTH='50'> </h2> \n");
    
            script += ("<h2><INPUT TYPE=SUBMIT></h2> \n");
    
            script += ("</FORM> \n");
            script += ("<BR> \n");
            script += ("</body> \n");
            script += ("</html> \n");
    
            //----------------------------------
    
            String script1 = "";
            script1 += "HTTP/1.1 200 OK \n";
            script1 += "Content-Type: text/html \n";
            script1 += "Content-Length: " + (String)script.length() + "\n";
            script1 += "\n";  //  do not forget this one //????
      
            script = script1+script;
    
            client.print(script);
            delay(100);
    
            //stopping client        
            /*
            while(client.connected()) { 
              delay(10);    
            }   
            */      
            client.stop();
          }
        }
        delay(1);
      }
    }

  4. #64
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.645
    Warum so: (String)script.length()

    bei mir funktionierte das auch ohne das "(String)"

    ???

    PS: gib mal:
    "(String)" bei google ein, mit Gänsefüßchen oder ohne!

  5. #65
    HaWe
    Gast


    bei mir ging es zunächst nicht, aber es stört jetzt auch nicht weiter

  6. #66
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.645
    Soll das (String) extra in String konvertieren?

  7. #67
    HaWe
    Gast
    ja, genau, habe es noch mal getestet und dann kommt ohne (String):
    ESP8266_ServerHomeWebMail_078:1273:59: error: invalid operands of types 'const char*' and 'const char [2]' to binary 'operator+'

    script1 += "Content-Length: " + script.length() + "\n";
    was ja eigentlich verständlich ist, denn lenghth() ist ja eine Zahl, die man nicht an cstrings addieren kann.

  8. #68
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.645
    Ok. Gut! Danke! Hatte so etwas ähnliches im Hinterkopf. Nur es gibt Funktionen, wo man es nicht extra konvertieren muss. Hätte auch mit String(script.length(), DEZ) oder schlicht mit String(script.length()) funktioniert?

    Jetzt können wir jedenfalls 2.5.2 weiter verwenden.

  9. #69
    HaWe
    Gast
    ja, String(...) funktioniert auch als Funktion, (String) ist ein explizites typecasting.
    Und ja, ich freue mich auch sehr, dass jetzt de 2.5.2 funktioniert!
    Nochmals vielen Dank für die erfolgreiche Mitarbeit und Hilfe!
    Geändert von HaWe (25.10.2019 um 19:16 Uhr)

  10. #70
    HaWe
    Gast
    PS,
    ein Randproblem: wie lösen eigentlich Arduinorianer das Extrahieren des eingegeben Strings?
    das ist zwar etwas, das ich gelöst habe mit eigenen Funktionen, aber ich kann mir ehrlich gessagt nicht vorstellen, dass es da bei Arduino noch keine fertige Funktion gibt...?

    Code:
    //----------------------------------------------------------------------------
    // String functions
    //----------------------------------------------------------------------------
    
    int16_t  strstrpos(char * haystack,  char * needle)   // find 1st occurance of substr in str
    {
       char *p = strstr(haystack, needle);
       if (p) return p - haystack;
       return -1;   // Not found = -1.
    }
    
    //-------------------------------------------------------
    const int  MAXLEN = 1024;
    const int  TOKLEN = 64;
    
    //-------------------------------------------------------
    char * cstringarg( char* haystack, char* vname, char* sarg ) {
       int i=0, pos=-1;
       unsigned char  ch=0xff;
       const char*  kini = "&";       // start of varname: '&'
       const char*  kin2 = "?";       // start of varname: '?'
       const char*  kequ = "=";       // end of varname, start of argument: '='
       char  needle[TOKLEN] = "";     // complete pattern:  &varname=abc1234
    
       strcpy(sarg,"");
       strcpy(needle, kini);
       strcat(needle, vname);
       strcat(needle, kequ);
       pos = strstrpos(haystack, needle); 
       if(pos==-1) {
          needle[0]=kin2[0];
          pos = strstrpos(haystack, needle);
          if(pos==-1) return sarg;
       }
       pos=pos+strlen(vname)+2; // start of value = kini+vname+kequ   
       while( (ch!='&')&&(ch!='\0') ) {
          ch=haystack[pos+i];    
          if( (ch=='&')||(ch==';')||(ch==' \n')||(ch=='\r') ||(ch=='\0')
            ||(i+pos>=strlen(haystack))||(i>TOKLEN-1) ) {
               sarg[i]='\0';
               return sarg;
          }       
          if( (ch!='&') ) {
              sarg[i]=ch;          
              i++;       
          }      
       } 
       return sarg;
    }
    
    
    // *SNIP*
    
       cstringarg(strinput, "uname", struname); // uname
       cstringarg(strinput, "upwd", strupwd); // upwd
       if ( (strlen(strupwd)==strlen(website_upwd)) && (strcmp(website_upwd, strupwd)==0)
              && (strlen(struname)==strlen(website_uname)) && (strcmp(website_uname, struname)==0) 
             )         
       {
       //...
       }
    Geändert von HaWe (25.10.2019 um 19:17 Uhr)

Seite 7 von 10 ErsteErste ... 56789 ... LetzteLetzte

Ähnliche Themen

  1. arduino ide mit esp8266
    Von NotEvil im Forum NodeMCU-Board und ESP8266, ESP32-Serie
    Antworten: 4
    Letzter Beitrag: 12.01.2017, 14:17
  2. Raspberry Pi 3: Neuer Bastelrechner ist ab sofort verfügbar
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 4
    Letzter Beitrag: 29.02.2016, 20:56
  3. [ERLEDIGT] Google wird am Lenovo-Tablet ohne Zutun beendet
    Von oberallgeier im Forum Offtopic und Community Tratsch
    Antworten: 5
    Letzter Beitrag: 24.11.2015, 08:02
  4. Funktion wird nicht richtig beendet
    Von kowolfgang im Forum C - Programmierung (GCC u.a.)
    Antworten: 16
    Letzter Beitrag: 31.12.2008, 16:37
  5. schieberegister neuer versuch...
    Von Bluesmash im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 12
    Letzter Beitrag: 11.07.2005, 21:10

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests