![]() |
ReuseSocket (SO_REUSEADDR)
Hallo,
ich verschicke mit meiner Applikation Nachrichten per UDP durch das Netzwerk. Da eine Anwendung mehrfach auf einem Rechner gestartet werden kann, habe ich nach einer Lösung gesucht, die UDPServer (ich benutze Indy) der Anwendungen an den selben Port zu binden. Die Lösung des Problems habe ich in der Socket-Option SO_REUSEADDR gefunden, welche im TCPServer von Indy auch schon implementiert ist (Property ReuseSocket). Habe die selbe Implementierung auch für den UDPServer gemacht und es funktioniert auch alles, solange ich Broadcasts empfangen. Alle Anwendungen bekommen dabei die selbe Nachricht und alles ist gut. Probleme bereiten mir Nachrichten, welche direkt an die IP eines Rechner geschickt werden. Hier bekommt nur immer eine Anwendung die Nachricht (welche scheint zufällig zu sein). Die Anwendung scheint die Nachricht vom Socket-Stack zu nehmen und die nächste Anwendung sieht davon nichts mehr ... Ich möchte aber, dass alle Anwendungen die Nachricht bekommen. Hat jemand eine Idee? Ich hab von dem Stichwort Multicast gehört. Weiß damit aber nicht so recht etwas anzufangen. Gruß, Steffen |
Re: ReuseSocket (SO_REUSEADDR)
Ich kenne Multicast nur in Zusammenhang mit dem ICMP-Protokoll. Vielleicht kommst du ja da weiter
|
Re: ReuseSocket (SO_REUSEADDR)
Danke für deine Antwort, hat mich aber bislang auch leider noch nicht weiter gebracht :(
Das Problem muss doch schonmal jemand gehabt haben ... |
Re: ReuseSocket (SO_REUSEADDR)
Also nur mal so wegen den Begriffen:
Unicast = Punkt-zu-Punkt-Verbindung D.h. Von einer IP auf eine andere. Multicast = Gruppenauruf imho ist es vergleichbar mit Broadcast Zu deinem Problem: Es kann leicht daran liegen des es ein Bug von den Indys ist ... wäre ja nicht der erste ;) Vllt. kannst du irgendwie den Entwicklern ne Mail schreiben |
Re: ReuseSocket (SO_REUSEADDR)
Hallo,
ich habe das mit dem Multicast aus der MSDN, dort heißt es ![]() Zitat:
![]() Oder gibt es eine andere Lösung dieses Problem zu lösen? Gruß, Steffen |
Re: ReuseSocket (SO_REUSEADDR)
Zitat:
Ich habe es ![]() |
Re: ReuseSocket (SO_REUSEADDR)
Ja, eine einfache Variante davon hatte ich vorher auch schon.
Ist nur sehr fehleranfällig und daher fand ich diese Möglichkeit viel interessanter. Schade nur, dass keine da mehr zu weiß :( |
Re: ReuseSocket (SO_REUSEADDR)
Hab einen sehr guten, deutschen Text über Multicast gefunden:
![]() Besser verstehe ich es jetzt, glaube allerdings, dass das nicht die richtige Lösung für mich ist. Klingt allerdings auch sehr interessant. Falls noch jemand ein bessere Idee hat, als eine Port-Reihe aufzubauen und die Nachrichten dort durchzureichen wäre ich dafür naqtürlich sehr dankbar ;) Gruß, Steffen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz