Tobi482 - Sa 27.09.08 15:41
Titel: Generelle Frage zum UDP Protokoll
Hi Leute,
ich hab schon einige Erfahrung mit dem TCP/IP Protokoll gemacht, musste aber letzten zwingend auf UDP zurück greifen. Mir ist ein essentieller Teil bei diesem Protokoll nicht klar. Mein Ziel ist es einen einfachen Datenaustausch zu ermöglichen.
Ich erkläre mal ganz generell wie ich bisher vorgeganen bin und auf das Problem gestoßen bin.
Ich habe zwei Sockets, den ersten Socket A im Server und den zweiten Socket B im Clienten.
1. Beide Anwendungen rufen "WSAStartup($101, WSAData);" um den Socketbetrieb zu ermgölichen
2. Im Server wird der Socket A erstellt und auf Port 9000 ge'bounded'ed
3. Im Client wird der Socket B erstellt und auf Port 8000 ge'bounded'ed;
Quelltext
1: 2: 3: 4:
| +--------------+ +--------------+ | Server | | Client | | A.bind(9000) | | B.bind(8000) | +--------------+ +--------------+ |
4. Client sendet ein Paket an den Server
5. Server empfängt das Paket und soll eine antwort schicken
Diese Antwort kommt jedoch nie am Client an. Ich bin dem Fehler schon ganz dicht auf den Fersen.
Wenn der Server merkt das Daten für ihn angekommen sind ruft er recvfrom auf. Ein Parameter davon ist ein per Referenz übergebene Struktur vom Typ 'sockaddr_in'. Hierrein werden Informationen über den Absender der Daten gespeichert. Der Server beantwortet die vom Client geschriebene Frage und möchte die Antwort zurück schicken. Dafür nimmt er die Adresse und den Port, die er aus der oben erwähnten Strukture erhält und schickt die Antwort zurück. Der Client erhält diese Antwort jedoch nie. !!!
Nach analyse dieser Struktur stellte sich heraus, dass das Paket vom Client gar nicht vom Port 8000 aus gesendet wurde. Der Server hat also das Paket empfangen und es an den gleichen Port zurück gesendet, von dem es gekommen ist. Da der Client aber auf diesem Port nicht gebunden war, wurde der Client nie vom Eintreffen der Antwort informiert.
Der Fehler leigt also im Clienten, der zwar auf dem Port 8000 auf Pakete wartet, sie aber durch einen "scheinbar zufälligen freien Port" sendet.
Frage:
Wie kann man in der Awndung die Daten sendet den Port festlegen durch den Daten gesendet werden?
Es ist möglich, dass ich das Prinzip des UDP Protokolls völlig falsch verstanden habe und sich diese Frage normalerweise nicht stellt. In diesem Falle bitte ich um etwas Aufklärung :)
Mit freundlichen Grüßen
Tobi