Forum: Mikrocontroller und Digitale Elektronik Fragen zu Arduino Ethernet Library


von Max (Gast)


Lesenswert?

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

von EAF (Gast)


Lesenswert?

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.

von Max (Gast)


Lesenswert?

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?

von EAF (Gast)


Lesenswert?

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?

von J. S. (jojos)


Lesenswert?

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
Noch kein Account? Hier anmelden.