Columbus hat geschrieben:
Ich habe hier ins Forum gepostet, weil ich mich schlicht einfach gewundert habe, daß in einigen Beispielen eben UDP-Verbindungen Clientseitig mit Bind aufgebaut werden.
aus der Sicht des UDP Protokolls gibt es keinen Client und keinen Server, daher kann jeder Datagram-Socket auch zu jeder Zeit senden und empfangen. Das ist ja auch der Vorteil von UDP, daß die Flußkontrolle an die Bedürfnisse der Applikation angepaßt werden kann, oder eben ganz darauf verzichtet werden kann, wenn kein Bedarf dafür besteht.
Columbus hat geschrieben:
Nun habe ich in verschiedenen Beispielen im Netz (u.a. in dem OpenBook von J.Wolf "C von A bis Z") daß auch bei UDP-Clients "gebunden" wird.
wie gesagt, der sogenannte "Client" kann auf diesem Datagram-Socket auch unaufgefordert Daten empfangen, daher gibt es aus der Sicht des UDP-Protokoll keinen Server und keinen Client.
Schau dir z.B einmal einen DNS Server an, der auf dem gleichen Port die Anfragen seiner Clients bekommt, mit dem er auch die Anfragen an den übergeordneten Server schickt. Hier ist also "serverseitig" gleich "clientseitig".
Je nach Bedarf kann es also auch für einen Client sinnvoll sein, den Datagram Socket zu binden, entweder weil er einen speziellen Port verwenden möchte, oder weil er nur ein spezielles Interface verwenden möchte.
Columbus hat geschrieben:
Mein eigentliche Aufgabe ist zwei WinXP® Rechner (ja ich weis, hier eigentlich OT, aber ich muss es nun mal machen) über eine Gigabit-Ethernet-Leitung und UDP zu verbinden. Zur Zeit sind damit aber nur 200MBit drin, mit TCP komme ich immerhin auf knapp 600MBit.
TCP mit seiner starren Flußkontrolle sollte eigentlich das untere Limit sein.
Columbus hat geschrieben:Und es gibt ein Problem mit dem Singlecore-Prozessor wenn zwei Prozesse sich über UDP unterhalten. Denn ohne Flusskontrolle schreibt der Client einfach etwas raus, während der Server gar keine Chance hat etwas entgegen zu nehmen, weil er ja nicht den Prozessor hat. Also geht bei diesem Test zwangsläufig was verloren, aber es ist ja nur ein Test.
das ist eigentlich kein Sonderfall, auch bei einem "Remote-Server" ist nie gewährleistet, daß dieser gerade einen Prozessor hat.
Gruß
gms