Forum: Mikrocontroller und Digitale Elektronik UDP-Server mit OpenMCP


von Andy (Gast)


Lesenswert?

Hallo,
ich hänge gerade ein bißchen an den Innereien von OpenMCP und möchte 
mich mal umhören, bevor ich das Rad mangels Wahrnehmung neu erfinde... 
:(


Ich möchte unter OpenMCP (Pollin AVR-NetIO mit ATmega644) die NetBIOS 
Namensauflösung implementieren. Speicher ist momentan nicht das Problem, 
sondern das API.
Ich habe einen UDP-Server (UDP_ListenOnPort()). Dieser prüft zyklisch, 
ob neue Daten angekommen sind (UDP_GetByteInBuffer()), strikt sein 
Antwortpaket und schickt es zurück an den Empfänger.
Und genau das ist mein Problem: Die Sende-Funktion im Stack 
(UDP_SendPacket()) sendet zurück an die Adresse, welche in der 
socket-Struktur hinterlegt wird. Die Initialisierung der Struktur 
erfolgt am Anfang mit ListenOnPort(). Wie finde ich beim Empfang heraus, 
von wem das Paket kommt? Der UDP-Header wird auf den 1. Blick beim 
Empfang nicht abgespeichert (udp()). Der Eth-Puffer ist beim Pollen 
(THREAD_xxx) je nicht mehr unbedingt aktuell.

Übersehe ich etwas? Mache ich etwas grundsätzlich falsch?
Wie ist denn das Konzept gedacht?

MfG Andy

: Verschoben durch User
von JojoS (Gast)


Lesenswert?

udp() ruft UDP_GetSocket() auf, und da drin passierts, da werden source 
port/IP vom Empfang in die Sockentabelle übernommen.

von Andy (Gast)


Lesenswert?

Yep, stimmt! ;)
Danke für den Hinweis!

Das heißt dann im Umkehrschluß, daß ich den Socket nach jedem Empfang 
komplett schließen muß (CloseSocket()), weil ja die Initialisierung 
nicht zurückgesetzt wird auf generellen Empfang.
In den Tiefen des Stacks möchte ich von der Server-App nicht 
heruminitialisieren. Wäre zwar technisch möglich, aber irgendwie 
unschön.  :)

Nochmals Danke!
Andy

von JojoS (Gast)


Lesenswert?

da ist noch eine Funktion UDP_BackToListen(int socket) die wohl dafür 
gedacht, die setzt die entsprechenden Felder auch zurück.

von Andy (Gast)


Lesenswert?

Ops, da gibt es wohl mittlerweile eine neue Version von OpenMCP.
Mein Code hat die Funktion noch nicht - ist auch schon 1 Jahr in Arbeit 
(bzw in der Schublade). Sollte aber schnell nachgerüstet sein.

von JojoS (Gast)


Lesenswert?

ich hatte das im April vom SVN ausgecheckt, habe aber auch nicht viel 
damit gemacht, ausser es auf dem NetIO zum Laufen zu bekommen.
Aber das BackToListen braucht man evtl. gar nicht, wenn für die UDP 
Bearbeitung ein Callback registriert ist werden nach dem Callback Aufruf 
in udp() die Destinationfelder auch schon rückgesetzt. So eine echo 
Anwendung müsste also ad Hoc funktionieren (ein Beispiel für die udp 
Nutzung habe ich in apps/CAN gesehen).

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.