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!
Tintenblut 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... ;)
Tintenblut 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.
Tintenblut 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.
Narses 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!
Tintenblut 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:
Tintenblut 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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!