Hallo zusammen, Ich habe eine Frage zum Thema lwIP. Auf einem STM32F4 läuft das Beispiel für einen UDP Server von hier: http://mikrocontroller.bplaced.net/wordpress/?page_id=1756 Das klappt soweit alles ganz gut. Man muss jedoch dem lwIP eine Host und Remote IP nennen. Gibt es eine Möglichkeit beim Empfang eines Paketes die IP Addresse vom Sender herauszufinden? Ansonsten kann man ja nur an die vorher im Source festgelegte IP antworten oder? Vielen Dank schonmal, Stefan
Jedes UDP Paket enthält die IP-Adresse des Absenders. Die entsprechende call-back Funktion bekommt diese IP Adresse als Parameter übergeben: http://lwip.wikia.com/wiki/Raw/UDP
Stefan U. schrieb: > Jedes UDP Paket enthält die IP-Adresse des Absenders. Japs, und eben diese würde ich gerne auslesen. Finde aber keine Structure oder ähnliches wo diese eingetragen / gespeichert wird. Und da ich ja beim senden die udp_send Funktion mit der IP Addresse an die ich senden will aufrufen muss, bin ich ja derjenige, der die als Parameter übergeben muss. Und ich weiss die Adresse ja nicht.
Wenn der Wiki Artikel nicht zu deinem Programm passt, dann zeige mal dein Programm. Hier ist die gesuchte Struktur: http://www.nongnu.org/lwip/2_0_0/structudp__pcb.html Du musst lernen, Suchmaschinen zu benutzen.
in ub_lib\stm32_ub_udp_server.c ist der udp_receive_callback, da werden die Senderinfos nicht benutzt. Du müsstest die UDP_SERVER_t Struktur um remote_addr und remote_port erweitern und diese Felder im receive callback füllen.
Stefan U. schrieb: > Hier ist die gesuchte Struktur: > http://www.nongnu.org/lwip/2_0_0/structudp__pcb.html Ja, darin hätte ich das auch erwartet... Nur leider stehts dort eben nicht drin. Johannes S. schrieb: > in ub_lib\stm32_ub_udp_server.c ist der udp_receive_callback, da werden > die Senderinfos nicht benutzt. > Du müsstest die UDP_SERVER_t Struktur um remote_addr und remote_port > erweitern und diese Felder im receive callback füllen. Ja an der Stelle wollte ich die IP auch ergänzen. Mein Problem war eben nur, dass ich die in den Strukturen wo ich sie erwartet hatte, nicht gefunden habe, bzw nur die die ich beim Server connect definiert hab. Hab sie aber mitlerweile gefunden bei der Funktion: void udp_receive_callback(void *arg, struct udp_pcb *upcb, struct pbuf *p, struct ip_addr *addr, u16_t port) Es sind die Übergabeparameter "ip_addr *addr, u16_t port". Das ist IP und Port vom Absender. Danke für die Antworten
Stefan schrieb: > bzw nur die die ich beim Server connect definiert hab. beim UDP gibt es kein echtes Connect, das ist in der Lib nur darübergestülpt, deshalb gibt es das da nicht. Das Connect startet nur den Server und macht ein bind() an einen local port. Damit ist der Connect ok aber du hast eben noch keinen Gegner.
Hallo an den Threadersteller, ich habe genau das gleiche Problem und würde gerne das Beispiel so umprogrammieren, dass die Host IP nicht im Quelltext vorher angegeben werden muss. Die Funktion, von der du gesprochen hast, habe ich auch gefunden. Sie wird bei mir mit der Funktion udp_recv(upcb_server, udp_receive_callback, NULL); in "stm32_ub_udp_server.c" aufgerufen bzw. übergeben. Das ist allerdings auch die einzige Stelle. Beim Programmdurchlauf wird sie auch nicht aufgerufen bzw. durchlaufen. Wie genau hattest du das Problem jetzt gelöst? Gruß Patrick
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.