Forum: Mikrocontroller und Digitale Elektronik lwIP STM32f4 kontiuierlich senden


von Noob1991 (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich versuche mit einem Stm32f4-Board und mit Hilfe des lwIP-Stacks eine 
TCP/Ip-Verbindung aufzubauen und versuche daraufhin ein beliebiges 
Zeichen zu senden. Ich habe mir bereits das Echo-Server Beispielprogramm 
angeschaut und versuche jetzt dieses auf meine Anwendung anzupassen. 
Leider gelingt es mir mit dem Board immer nur dann die Daten raus zu 
senden, sobald das Board vom Rechner ein Zeichen erhält. Ich möchte 
jedoch, dass sobald die Verbindung steht das Board Daten rausschickt.
Ich bitte schonmal vorab um Verzeihung, dass meine Netzwerkkenntnisse 
nicht die besten sind.
Die Source-Dateien befinden sich im Anhang.

von M.K. B. (mkbit)


Lesenswert?

Ich hab mal kurz über deinen Code geschaut. Du verwendest tcp_write und 
die Doku dazu 
(http://www.nongnu.org/lwip/2_0_x/group__tcp__raw.html#ga6b2aa0efbf10e254930332b7c89cd8c5) 
sagt:
"It waits in the expectation of more data being sent soon (as it can 
send them more efficiently by combining them together)." Man muss dann 
noch tcp_output aufrufen um sofort zu senden.

Gerade weil du sagst, dass deine Netzwerkkenntnisse nicht so gut sind, 
hier ein paar Hinweise, die überraschend sein könnten.

1) Der Stack wartet normalerweise ein Zeit, ob noch weitere Daten 
kommen, damit nicht jedes einzelne Byte ein eigenes Paket mit Header 
bekommen muss.

2) TCP garantiert nur, dass die Daten am anderen Ende wieder in der 
selben Reihenfolge rauskommen, aber nicht, dass sie in den gleichen 
Blöcken rauskommen. Wenn du z.B. auf der einen Seite 4 Strings zu je 20 
Byte verschickst, dann können diese beim Empfänger in beliebiger 
Stückelung ankommen. Es kann sein, dass es beim Test funktioniert, aber 
jeder Router und jedes Betriebssystem kann es wieder anders machen. Wenn 
du also Daten trennen willst, dann brauchst du ein Protokoll mit 
Längeninfo oder Steuerzeichen.

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.