UDP Server: Ein/Mehrere Ports/Sockets?



  • Hi!

    Ich schreibe einen TCP/UDP Client/Server und frage mich nun, wie ich am besten mehrere UDP Clienten (bis zu ein paar hundert) 'serven' soll:

    1: Nur ein Port, und nur ein Socket für alle Clienten, ein WSARecvFrom pro Client
    2: Nur ein Port, aber ein Socket pro Client (REUSEADDR), ein WSARecvFrom pro Socket
    3: Ein Port und ein Socket pro Client, ein WSARecvFrom pro Socket

    Beim TCP Server ist es ja so, dass es einen listen Port gibt, da kommen die connects rein, und das System erstellt dann ein client socket pro accept, welches aber den selben Port wie listen hat, also es wird immer nur ein Port gebraucht (ähnlich wie #2).

    Nur wie am besten mit UDP? Ist 3 wirklich nötig? Oder reicht 2? 1 ist wohl nicht so performant, aber keine Ahnung wie groß der Unterschied zu 2 wäre.
    Ich möchte übrigens generell nur 1x WSARecvFrom pro Client posten, da erspare ich mir die Serialisierung.



  • Hmm ich glaube REUSEADDR funktioniert für Unicast gar nicht. Hätte eigentlich erwartet, dass die Nachricht an irgendeinem socket ankommt, aber sie kommt dann scheinbar gar nicht an.
    Ok bleibt wohl nur noch 1 und 3. Ich tendiere nun zu 1, allerdings bedeutet ein Socket auch nur ein Buffer, ob das bei vielen Clienten zum Problem werden kann? Und wenn ich ihn numClients*clientBufferSize groß mache?
    Bei 3 müsste der Client zuerst vom UDP Server Port erfahren, bevor er senden kann, aber das ist jetzt auch nicht so das Problem... (TCP Verbindung wird ja zuerst aufgebaut).


Log in to reply