Thread win32 udp server (5 answers)
Opened by hudo at 2007-08-09 04:12

Gast Gast
 2007-08-09 21:05
#97861 #97861
hudo+2007-08-09 02:19:49--
[...] Nun ist es so das man den server zuerst starten muß, ist das normal ?


Solange der Server nicht läuft, landet alles, was der Client verschickt, im Datennirvana und der Client wird daraufhin ewig auf die Antwort warten.

Überhaupt solltest Du bei Verwendung von UDP auf jeden Fall mit Timeouts für den Empfang arbeiten, denn das Protokoll garantiert nicht, dass versendete Pakete auch immer ankommen! Mehrere abgeschickte Pakete dürfen bei UDP auch überhaupt nicht, mehrmals oder in durchgewürfelter Reihenfolge ankommen. Die einzige Garantie ist, dass die Daten im Paket intakt sind, sofern es ankommt. In lokalen Netzwerken treten diese Effekte meistens zwar nicht auf, wenn aber eine der bei UDP fehlenden Protokolleigenschaften kritisch ist, sollte man sie auf Applikationsebene implementieren oder gleich TCP verwenden.

Quote
Desweiteren schickt der client nur ein request und bricht dann mit einer Fehlermeldung (unknown error) bei der recv Zeile ab.

Wenn jedoch im server die zwei Zeilen mit #### davor benutzt werden, statt der jetzigen print und sock->send Zeile,
laeuft der client wie erwartet unendlich, schickt staendig requests und empfaengt sauber.

Was ist da das Problem ?? Wo die Aenderung eigentlich nur einige strings mehr sind ($startzeit, $laenge ) !!
[...]


Was bei Deinem Code merkwürdig ist, ist die Tatsache, dass der Server send ohne eine Zieladresse verwendet. Da Du nirgends ein connect ausführst und mit UDP ein verbindungsloses Protokoll verwendest, ist es wohl pure Glückssache, ob das Betriebssystem die Antwort an den richtigen Client verschickt.

Es wäre auch möglich, dass die Daten, die Du verschickst, nicht in ein einzelnes UDP-Paket passen und dann ein Übertragungsfehler entsteht -- die maximale Größe von UDP-Paketen hängt jedenfalls auch vom Betriebssystem ab und die Menge verschickten Textes ist im kommentierten Programmteil ja etwas geringer.

View full thread win32 udp server