Hallo! Ich habe ein paar Fragen zur Arduino Ethernet Library. (Eingesetzte Hardware: RP2040 + W5500) Wenn über die Ethernet Library mit der Funktion client.write(buf,len), Daten gesendet werden, dann retourniert diese Funktion die Anzahl der gesendeten Bytes. Blockiert diese Funktion client.write() jetzt so lange bis das entsprechende TCP-Paket vom Empfänger mittels ACK bestätigt wurde, oder retourniert die Funktion sobald das Paket am Weg ist? -> Darf client.write() ohne Wartezeit hintereinander aufgerufen werden, oder muss auf etwas gewartet werden? Und noch eine Frage zur Funktion client.connected() Wie funktioniert diese Funktion genau? retourniert diese immer true wenn zuvor die Funktion connect() erfolgreich war? Und noch eine Frage: Wenn ein Device zyklisch über den Tag an einen Server ein paar Daten übermittelt (ca. alle 10-30 Minuten 1 - 2 Pakete) sollte man da die TCP Verbindung aufrechterhalten, oder jedes mal neu initiieren? Was wären die Vor bzw. Nachteile? Ich hoffe die Fragen sind nicht allzu blöd, und ich würde mich sehr über ein paar Tipps freuen. Danke und Viele Grüße, Max
Max schrieb: > Und noch eine Frage zur Funktion client.connected() > Wie funktioniert diese Funktion genau? retourniert diese immer true wenn > zuvor die Funktion connect() erfolgreich war? Die Doku dazu sagt: > Whether or not the client is connected. Note that a client is > considered connected if the connection has been closed but there > is still unread data. Mein Rat: Erst Doku lesen, dann fragen.
Diesen Satz habe ich mehrmals gelesen, und er besagt, dass client.connected() true zurückgibt, wenn vom Server noch nicht alle Daten gelesen wurden, obwohl die Verbindung bereits geschlossen wurde. Das hat aber nicht wirklich etwas mit meiner Frage zu tun. Was führt dazu dass client.connected() false zurückgibt? - Wenn der Server nicht antwortet? - Wenn das Kabel abgesteckt wird? - Oder nur wenn client.stop() aufgerufen wurde (und alle Daten vom Server gelesen wurden.) Kommt es bei client.connected() zu einer expliziten Kommunikation mit dem Server?
Max schrieb: > Diesen Satz habe ich mehrmals gelesen, Danach sah deine Frage nicht aus. Wie wäre es, wenn du in den Quellkode schaust..... Der liegt ja schließlich öffentlich aus: https://github.com/arduino-libraries/Ethernet/blob/master/src/EthernetClient.cpp#L154 https://github.com/arduino-libraries/Ethernet/blob/master/src/socket.cpp#L199 Die Letzten Antworten sollte dann das Datenblatt des WZ Chips bringen. --- Alternativ, wenn der Code usw. zu schwierig für dich ist: Ausprobieren Kann ja nicht so kompliziert sein, da mal ein Kabel abzuziehen! Oder soll ich das für dich machen?
Bei TCP ist es legal das Kabel zu ziehen und Tage später wieder einzustecken. Solange eine Seite nichts sendet bekommt sie davon nichts mit. Da muss man auf Applikationslevel selber einen Watchdog implementieren. Oder im Socket Keep Alive aktivieren, was aber in der Implementierung versteckt ist und Wiznet hat sowieso eine eigene Interpretation der Standards. Da hilft nur Testen, zumal die allgemeine Beschreibung nicht exakt für jede Implmentierung gelten muss. Kabel abziehen ist auch nur ein halber Test. Wenn die Unterbrechung nach einem Switch passiert kann auch kein Medium unterbrochen erkannt werden.
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.