Tag11 automatisch

Foren User Projekte Tag11 automatisch

Schlagwörter: 

Ansicht von 6 Beiträgen - 1 bis 6 (von insgesamt 6)
  • Autor
    Beiträge
  • #809
    Klaus
    Teilnehmer

    Ich bin bald am verzweifeln. Ich habe den Sketch von Tag11 mal etwas erweitert, so dass eine Antwort von ganz alleine generiert wird.
    Teste ich den Sketch mit Firefox3, so funktioniert es auch fast einwandfrei. Fast, weil komischerweise in der Rückmeldung auf die Nachricht „Hallo…“ noch ein „busy s…“ dran hängt. Dann aber nächste Zeile SEND OK und die Antwort kommt ohne Probleme zurück zum Browser.
    Nutze ich stattdessen einen aktuellen Opera, Chrome oder Safari, so werden 2 Verbindungen zum Modul aufgebaut. Auf der Verbindung 0 kommt wie gewohnt die Anfrage des Browsers, Verbindung 1 wird gleich wieder geschlossen. Mein Sketch sendet nun die Antwort wie gewohnt an Verbindung 0, Verbindung 1 wird ignoriert, da keine Anfrage rein kommt. Allerdings wird bei jeder Anfrage 2 Antworten generiert, wovon nur eine durch geht, bei der anderen kommt „Send Error“.
    Vielleicht gibt es ja hier jemanden, der weiß, was die modernen Browser da komisches treiben.

    #812
    Raabinator
    Mitglied

    Hallo Klaus.

    Aus deiner Funktion espConnectionIP gibst du einen Zeiger auf ein char-Array zurück, das nur in dieser Funktion gültig ist.
    Dieses Array wird beim Aufruf der Funktion auf dem Stack angelegt. Wird die Funktion verlassen, wird dieser Speicher wieder für die Benutzung freigegeben. D.h. die Daten werden durch Daten der nächsten Funktion überschrieben. Das kann funktionieren, ist aber sehr unwahrscheinlich und unsicher.
    Da gibt es zwei Möglichkeiten:

    • deklariere tmp1 als static (static char tmp1[100];). Damit wird tmp1 global angelegt und nicht mehr überschrieben, ist aber weiterhin nur in dieser Funktion sichtbar. Der Inhalt bleibt zwischen den Funktionsaufrufen erhalten.
    • definiere tmp1 global (vor allen Funktionen). tmp1 ist dann für alle Funktionen sichtbar, ausser für loop(), denn da gibt es nochmal ein lokales tmp1.
    • Diese Antwort wurde geändert vor 9 Jahren von Raabinator.
    #814
    Klaus
    Teilnehmer

    Ich hab das nur ausgelagert. Als ich es noch direkt in der loop() drin hatte, war das Ergebnis exakt das gleiche.

    #821
    Klaus
    Teilnehmer

    Lösung gefunden.

    String tmp;
    tmp=sendCom(tmp);

    hat dieses Phänomen erzeugt. sendCom gibt ein boolean zurück. Das wird nicht korrekt umgewandelt. Der alte Inhalt aus tmp bleibt erhalten, aber das Ende-Zeichen wird wohl überschrieben.

    Offen bleibt die Frage, warum die Browser heutzutage eine zweite Verbindung öffnen, die sie gleich wieder schließen?

    #899
    Roebi
    Mitglied

    Hallo Klaus.

    Ev. könnte
    https://en.m.wikipedia.org/wiki/HTTP_persistent_connection#HTTP_1.1
    https://en.m.wikipedia.org/wiki/HTTP_persistent_connection#Use_in_web_browsers
    ein Grund sein, dass die moderneren Browser (HTTP 1.1) das Verhalten des Webservers auf die Fähigkeit mehrere Verbindungen zu öffnen prüfen.

    Gruss Röbi

    #900
    Klaus
    Teilnehmer

    Danke, das hört sich nach einer plausiblen Erklärung an. Fragt sich nur, warum der Browser die Verbindung gleich wieder schließt? Der Server hat ja so gar keine Chance, mehrere Inhalte simultan zu übertragen.

Ansicht von 6 Beiträgen - 1 bis 6 (von insgesamt 6)
  • Du musst angemeldet sein, um auf dieses Thema antworten zu können.