Entwickler-Ecke

Internet / Netzwerk - UDPSockUtil - Client nicht da -> Fehlermeldung?


Tintenblut - Di 27.11.07 09:15
Titel: UDPSockUtil - Client nicht da -> Fehlermeldung?
Hallo Community

Ich sitze immernoch an dem UDPSockUtil von Narses und habe etwas gefunden was ich nicht recht verstehe.

Mein derzeitiges Problem:

Ich habe einfach testweise als LocalHost irgendetwas eingegeben. Eigentlich hatte ich eine Fehlermeldung beim Senden der Nachricht erwartet, oder dass einfach gar nichts passiert.
Stattdessen bekomme ich die Nachricht nach kurzer Zeit selbst.
Sendet das Programm die Nachricht als Broadcast wenn er den Empfänger nicht findet?

Gibts es hier vielleicht die Möglichkeit eine Fehlermeldung zu erhalten wenn die Nachricht nicht beim Empfänger ankommt?

LG


Narses - Di 27.11.07 10:47
Titel: Re: UDPSockUtil - Client nicht da -> Fehlermeldung?
Moin!

user profile iconTintenblut hat folgendes geschrieben:
Ich sitze immernoch an dem UDPSockUtil von Narses und habe etwas gefunden was ich nicht recht verstehe.
Dann wollen wir mal sehen... ;)

user profile iconTintenblut hat folgendes geschrieben:
Ich habe einfach testweise als LocalHost irgendetwas eingegeben. Eigentlich hatte ich eine Fehlermeldung beim Senden der Nachricht erwartet, oder dass einfach gar nichts passiert.
Stattdessen bekomme ich die Nachricht nach kurzer Zeit selbst.
Sendet das Programm die Nachricht als Broadcast wenn er den Empfänger nicht findet?
Ja, wenn du einen DNS-Lookup von der Kompo machen lässt und der Host kann nicht eindeutig aufgelöst werden, dann wird ein Broadcast gemacht (genauer: der UdpSockUtil schaltet in den Broadcast-Modus und muss ggfs. manuell da wieder rausgeholt werden, Stichwort: .Broadcast-Eigenschaft; steht auch alles so in der Doku. :idea: ;)). Ich denke schon länger über eine neue Version der Kompo nach, wo ein DNS-Lookup-Failure alternativ über das OnError-Event abgewickelt werden kann, mal sehen. :?

Zusammengefasst erklärt: du trägst einen Host ein, den es nicht gibt, der DNS-Lookup liefert einen Fehler (hier ist die kurze Wartezeit begründet), der TUdpSockUtil schaltet darauf hin in den Broadcast-Modus und sendet dann (auch) an sich selbst.

user profile iconTintenblut hat folgendes geschrieben:
Gibts es hier vielleicht die Möglichkeit eine Fehlermeldung zu erhalten wenn die Nachricht nicht beim Empfänger ankommt?
Das ist bei UDP grundsätzlich nicht vorgesehen, hat also auch nix mit der Kompo zu tun (die Aussage ist so nicht soo ganz korrekt, es gibt da eine ICMP-Signalisierung, aber das führt hier zu weit weg; jedenfalls sollte man es so betrachten). :idea:

Wenn du eine Empfangskontrolle brauchst, musst du festlegen, dass der Empfänger innerhalb einer bestimmten Zeit antwortet, bei einem Timeout ist dann klar: er hat nix empfangen. :idea: Dann allerdings kannst du auch gleich auf TCP aufsetzen, da ist das schon automatisch mit drin. ;)

cu
Narses


Tintenblut - Di 27.11.07 11:59
Titel: Re: UDPSockUtil - Client nicht da -> Fehlermeldung?
Moin moin

Danke Narses für die schnelle Antwort.


user profile iconNarses hat folgendes geschrieben:
Zusammengefasst erklärt: du trägst einen Host ein, den es nicht gibt, der DNS-Lookup liefert einen Fehler (hier ist die kurze Wartezeit begründet), der TUdpSockUtil schaltet darauf hin in den Broadcast-Modus und sendet dann (auch) an sich selbst.


Meine Broadcast-Eigenschaft ist doch aber auf 'False' gesetzt. :?!?:
Gibt es keine Möglichkeit die Broadcastfunktion zu disablen? Das wenn der Host nicht gefunden wurde, es auch kein Broadcast gesendet wird?


LG

~


Narses - Di 27.11.07 13:14
Titel: Re: UDPSockUtil - Client nicht da -> Fehlermeldung?
Moin!

user profile iconTintenblut hat folgendes geschrieben:
Meine Broadcast-Eigenschaft ist doch aber auf 'False' gesetzt.
Ja, vorher mag das so gewesen sein ;) nach dem DNS-Lookup stellt die Kompo das aber automatisch ein, weil die ermittelte IP 255.255.255.255 (INADDR_ANY) ist -> das führt dann zum Broadcast. :idea:

user profile iconTintenblut hat folgendes geschrieben:
Gibt es keine Möglichkeit die Broadcastfunktion zu disablen? Das wenn der Host nicht gefunden wurde, es auch kein Broadcast gesendet wird?
Du kannst zum einen den Host vorher anpingen [http://www.delphi-forum.de/topic_53259.html], dann weißt du auf jeden Fall, dass er aktiv ist. Ansonsten kannst du auch den Hostnamen in der Kompo setzen und anschließend .Broadcast auf TRUE prüfen und den Versand ggfs. abbrechen und wieder auf FALSE setzen. :nixweiss:

Wie gesagt: ich denke schon länger darüber nach, eine Option einzubauen, die genau diesen Fall anders abwickelt. :|

cu
Narses