lwIP IP Adresse des Senders herausfinden

Gast #4870248
Lesenswert?
• ▲
▼
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
Gast #4870363
Lesenswert?
• ▲
▼
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.
Gast #4870389
Lesenswert?
• ▲
▼
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.
Gast #4870430
Lesenswert?
• ▲
▼
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
Gast #4870459
Lesenswert?
• ▲
▼
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.
Gast #5383083
Lesenswert?
• ▲
▼
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.