zorro schrieb:
> Genau dies bereitet mir Probleme. Zunächst danke für die Hilfe.
>
> In der payload steht die empfangene Nachricht (die Nachricht lautet
> "Hallo Micro"):
>
1 | > char **buffer;
|
2 | > *buffer = (char*)p->payload
|
3 | >
|
>
> Wenn ich nun elementweise auf den buffer zugreifen möchte, dann sehe ich
> das entsprechende Zeichen nicht.
a) Du musst den String schon umkopieren.
Den Buffer hast du laut
1 | void udp_echo_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, struct
|
2 | ip_addr *addr, u16_t port)
|
3 | {
|
4 | if (p != NULL) {
|
5 | /* send received packet back to sender */
|
6 | udp_sendto(pcb, p, addr, port);
|
7 | /* free the pbuf */
|
8 | pbuf_free(p);
|
9 | }
|
10 | }
|
nur während des Callbacks zur Verfügung. Ganz am Ende dieser
Beispielfunktion wird ein pbuf_free gemacht. ...free.... bedeutet
praktisch immer, dass der entsprechende Speicher freigegeben wird und
recycled wird. D.h. wenn du dir nachher den Speicher ansiehst, kann da
schon wieder ganz was anderes drinnen stehen.
b) in der pbuf Struktur wird es ja auch noch sowas wie eine Längenangabe
geben. Passt die irgendwie zu dem was du geschickt hast? Hast du dir
schon mal den kompletten Buffer angesehen?
c) Nur weil du einen kompletten String beim Sender weggeschickt hast,
heisst das noch lange nicht, dass du den String auch in einem Rutsch vom
IP-Stack wieder kriegst. Da liegen ein paar Schichten dazwischen, welche
die Daten in Blöcke aufteilen.
d) Das Problem kann ja auch beim Sender liegen.
Also schau dir mal den Buffer genauer an, was denn da so alles drinnen
steht.