Also ich hatte enorme probleme tservers socket zu verwenden.
bin mit
indy sehr viel besser zurecht gekommen.
Zitat:
Ich dachte immer, dass UDP ein Protokoll ist, das NICHT verbindungsorientiert ist.
Das stimmt wohl so halbwegs - berbindungslos bedeutet aber nur, daß es für die verbindung keinen timeout gibt bzw. daß nicht überprüft wird, ob die daten wirklich angekommen sind.
Wenn also der socket auf der einen seite zugemacht wird, dann bekommt das die andere seite nicht mit.
Bei udp muß man auch ein bisschen mit dem buffer aufpassen.
Der kann leicht mal überlaufen.
Auch wenn du ein server/client programm darauf aufbaust mußt du aufpassen, daß du eine antwort auf eine serveranfrage nicht 2-3 mal empfängst bzw. der buffer auch wirklich geleert wird wenn du abrufst.
Ich hab dazu jedesmal den socket wieder zugemacht und danach wieder auf - eine bessere lösung hatte ich nicht - leider.
auch empfehle ich threads für das senden und empfangen zu verwenden mit entsprechendem timeout.
Arnulf
Edit:
Ach ich hab wiedermal schlecht gelesen
Du verwendest die events bei den udp combos.
Die werden dir aber nicht anspringen wenn etwas in den puffer kommt. Also das Receive wird so nicht funktionieren.
Das even springt nur an wenn du tatsächlich gerade dabei bist etwas zu empfangen aber nicht, wenn etwas in den puffer vom socket geschrieben wird.
ich mein damit, du mußt receive manuell aufrufen und danach springt das receive event an.
zumindestens war es bei mir so.
Am server kann man dafür blocking verwenden, dann kannst du in einem thread auf daten warten.
Beim client kann man das auch machen und damit dann ein event selber basteln.
Soweit ich weiß kannst du auch nachschauen ob etwas empfangen wurde - habs auf die schnelle vergessen - aber mit peekmessagebuffer (oder so ähnlich) geht das.
Arnulf