udp socket - Senden / Empfangen



  • Grundsätzlich - so habe ich gelesen - gibt es beim udp DGRAM Socket keinen Unterschied, ob man sendet oder empfängt.

    Trotzdem die Frage: Wie sollte man, wenn man einen bidirektionalen Austausch ermöglichen möchte (etwa eine VOIP oder WebCam - Verbindung), den Socket anlegen?

    Ist es hier nicht sinnvoller, auf dem Peer einen SENDER-SOCKET und einen EMPANGS-SOCKET zu erstellen, die auf unterschiedlichen Ports senden und empfangen?

    Ich stelle mir ansonsten vor, dass es zu einer Blockierung kommen könnte.



  • Ich stelle mir ansonsten vor, dass es zu einer Blockierung kommen könnte.

    Das kommt auf die Art des Sockets und der Empfangs- bzw. Sendefunktionen an.

    Bsp. Nicht blockierend wären Overlapped oder mit APC Callbacks...

    Simon



  • Danke, Simon. Das Ganze ist von vorneherein multithreaded angelegt.
    Die Frage ist bloß, ist es möglich, mit einem Thread zugleich Video zu senden und zu empfangen?

    Wenn ich es recht verstehe, gibt es diese Reihenfolge:

    sendo - blockiert, bis die Order erledigt ist
    recvfrom - dito

    Nach meinem Gefühl würde ich das auf 2 Threads, Sockets und Ports verteilen.
    Aber vielleicht bin ich da übervorsichtig.



  • Kommt, wie schon gesagt, darauf an, ob du einen blocking call verwendest oder nicht.
    Was genau verstehst du jetzt nicht?

    Wenn du ein blocking recv() hast, wirst du im selben thread nicht gleichzeitig send()en können.



  • Danke Simon, die Frage zeigt tatsächlich, dass ich noch immer an der Oberfläche des Themas herumkratze.
    Ich habe gerade entdeckt, dass man den Socket auch im nichtblockierenden Modus starten kann -

    O_NONBLOCK oder O_NDELAY

    Ich schlussfolgere also: ich kann zugleich senden und empfangen.
    Gibt's da Probleme, die man im Hinterkopf haben muss (siehe das Beispiel Videostream)



  • Guck Dir einfach mal die Overlapped Technik an.
    Simon


Log in to reply