AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi ReuseSocket (SO_REUSEADDR)
Thema durchsuchen
Ansicht
Themen-Optionen

ReuseSocket (SO_REUSEADDR)

Offene Frage von "MasterEvil"
Ein Thema von MasterEvil · begonnen am 22. Jan 2008 · letzter Beitrag vom 30. Jan 2008
Antwort Antwort
Benutzerbild von MasterEvil
MasterEvil

Registriert seit: 12. Feb 2005
Ort: Hannover
234 Beiträge
 
Delphi 7 Enterprise
 
#1

ReuseSocket (SO_REUSEADDR)

  Alt 22. Jan 2008, 14:16
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
  Mit Zitat antworten Zitat
Benutzerbild von Codewalker
Codewalker

Registriert seit: 18. Nov 2005
Ort: Ratingen
945 Beiträge
 
Delphi XE2 Professional
 
#2

Re: ReuseSocket (SO_REUSEADDR)

  Alt 22. Jan 2008, 14:30
Ich kenne Multicast nur in Zusammenhang mit dem ICMP-Protokoll. Vielleicht kommst du ja da weiter
  Mit Zitat antworten Zitat
Benutzerbild von MasterEvil
MasterEvil

Registriert seit: 12. Feb 2005
Ort: Hannover
234 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: ReuseSocket (SO_REUSEADDR)

  Alt 23. Jan 2008, 10:07
Danke für deine Antwort, hat mich aber bislang auch leider noch nicht weiter gebracht

Das Problem muss doch schonmal jemand gehabt haben ...
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#4

Re: ReuseSocket (SO_REUSEADDR)

  Alt 23. Jan 2008, 10:17
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
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
Benutzerbild von MasterEvil
MasterEvil

Registriert seit: 12. Feb 2005
Ort: Hannover
234 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: ReuseSocket (SO_REUSEADDR)

  Alt 28. Jan 2008, 08:19
Hallo,

ich habe das mit dem Multicast aus der MSDN, dort heißt es hier:
Zitat:
Once the second socket has successfully bound, the behavior for all sockets bound to that port is indeterminate. For example, if all of the sockets on the same port provide TCP service, any incoming TCP connection requests over the port cannot be guaranteed to be handled by the correct socket — the behavior is non-deterministic. A malicious program can use SO_REUSEADDR to forcibly bind sockets already in use for standard network protocol services in order to deny access to those service. No special privileges are required to use this option.

The exception to this non-deterministic behavior is multicast sockets. If two sockets are bound to the same interface and port and are members of the same multicast group, data will be delivered to both sockets, rather than an arbitrarily chosen one.
Und über Multicasts kann man dann hier etwas lesen. Für mich sind das aber böhmische Dörfer ...

Oder gibt es eine andere Lösung dieses Problem zu lösen?

Gruß,
Steffen
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: ReuseSocket (SO_REUSEADDR)

  Alt 28. Jan 2008, 09:05
Zitat von MasterEvil:
Oder gibt es eine andere Lösung dieses Problem zu lösen?
Das mit Multicast wäre mir neu. Aber wenn es da eine Lösung gibt, würde mich das auch interessieren.

Ich habe es hier so gelöst, dass jeder ein UDP-socket auf dem Standard-Port einrichtet. Dieses scheitert natürlich ab dem zweiten Programm/zweite Instanz. Diese sucht sich dann einfach einen freien Port und meldet sich bei der ersten Instanz an. Die erste Instanz führt dann eine Liste und sendet alle eingehenden Nachrichten weiter. Dann gibt es noch gewisse Sicherheiten, dass das System auch funktioniert, wenn die erste Instanz abstürzt. Ist natürlich umständlicher als einfach so eine (wenn es denn das gibt) Multicast-Adresse.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von MasterEvil
MasterEvil

Registriert seit: 12. Feb 2005
Ort: Hannover
234 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: ReuseSocket (SO_REUSEADDR)

  Alt 29. Jan 2008, 13:13
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ß
  Mit Zitat antworten Zitat
Benutzerbild von MasterEvil
MasterEvil

Registriert seit: 12. Feb 2005
Ort: Hannover
234 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: ReuseSocket (SO_REUSEADDR)

  Alt 30. Jan 2008, 13:54
Hab einen sehr guten, deutschen Text über Multicast gefunden: hier
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz