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