UDP empfangen, mehrere Progs an einem Port



  • Hallo,

    ich habe ein etwas größeres Problem und hoffe hier Hilfe zu finden.

    Ich versuche mit meiner Anwendung UDP Pakete, die ein Senderprogramm sendet, zu empfangen. Dieses Programm sendet stur UDP Pakete an/von Port 3525 an die Broadcast-Adresse 5.255.255.255. Darauf hab ich auch keinen Einfluss.

    Meine Anwendung klappt soweit wunderbar, allerdings gibt es da 2 Probleme:
    1. Es geht nicht, wenn beide Programme auf demselben PC laufen. Vermutlich liegt es daran, dass beide auf denselben Port zugreifen?! Ich dachte, das ließe sich mit dem Loopback-Device 127.0.0.1 ändern?!

    2. Ich muss die IP-Adresse des Rechners, auf dem sich mein Programm befindet in den Adressraum 5...* legen.

    Das klingt auch alles soweit logisch, ich besitze jedoch eine Art Portsniffer, der trotz 192.* IP und Betrieb auf demselben PC alle Bytes korrekt anzeigt. Es muss also funktionieren. Leider ist dieser Sniffer nicht OpenSource.

    Wenn ich das mit meiner Anwendung probiere, empfange ich zwar auch etwas, aber es sind irgendwelche strubbeligen Daten die sich da im UDP Buffer befinden. Die sind 100%ig auch von dem Senderprogramm - denn wenn es geschlossen ist, warte ich vergebens auf Daten - aber sie sind nicht "sinnvoll".

    Kann mir jemand erklären, was ich falsch mache?

    Ich arbeite mit Winsocks und dem einfachen recvfrom. Gibt es evtl. bei der SOCKADDR_IN oder bei den SOCKET Parametern irgendwelche Optionen, die mir helfen?

    RecvSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    RecvAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
    //RecvAddr.sin_addr.s_addr = htonl(INADDR_ANY); Tuts auch nicht
    

    Danke & LG



  • Entschuldigung wenn ich dir nicht genau helfen kann, aber:

    Wie oft kommt in deinem Programmcode das ^-Zeichen außerherhalb von Zeichenketten vor?
    Ich meinte damit, dass du wahrscheinlich im falschen Forum bist, wie es einen Betrag unter mit steht.



  • Moin,

    backi schrieb:

    1. Es geht nicht, wenn beide Programme auf demselben PC laufen. Vermutlich liegt es daran, dass beide auf denselben Port zugreifen?! Ich dachte, das ließe sich mit dem Loopback-Device 127.0.0.1 ändern?!

    nein ... vermutlich wird vomSenderprogramm der Server auf allen vorhanden Netzwerkkarten ein Port geöffnet ("0.0.0.0") ... damit wird auch localhost belegt

    2. Ich muss die IP-Adresse des Rechners, auf dem sich mein Programm befindet in den Adressraum 5...* legen.

    nein ... ist doch Broadcast ... das kommt immer an (im lokalen Netz)

    Wenn ich das mit meiner Anwendung probiere, empfange ich zwar auch etwas, aber es sind irgendwelche strubbeligen Daten die sich da im UDP Buffer befinden. Die sind 100%ig auch von dem Senderprogramm - denn wenn es geschlossen ist, warte ich vergebens auf Daten - aber sie sind nicht "sinnvoll".

    vermutlich werden die Daten vom Netzwerk zerhackstückelt ... kann bei zu großen UDP-Paketen passieren ... zum zusammensetzen brauchst Du eine Beschreibung des Paketes

    Ich arbeite mit Winsocks und dem einfachen recvfrom. Gibt es evtl. bei der SOCKADDR_IN oder bei den SOCKET Parametern irgendwelche Optionen, die mir helfen?

    schau mal mit dem Problem ins richtige Forum (Windows-API)

    hand, mogel



  • Hm. Roger. Danke schonmal für die Antworten.

    Die Beschreibung dieses Forums trifft für mich dennoch zu:

    C++ mit WinForms? Nennt sich C++/CLI, oder in der früheren Version Managed C++ [...]

    LG

    EDIT: Kann gelöscht werden. Habs kopiert => WinAPI. thx


Log in to reply