Re: [idUDPClient] Broadcast auf allen Interfaces raus senden
Hi Alex,
Zitat:
Zitat:
Zitat:
Die Erklärung macht jetzt einiges klar. Also prinzipiell bleiben zwei Möglichkeiten: Broadcast über alle lokalen Adapter (wie oben gesagt muß Du da leider selbst durch iterieren) oder aber eine manuelle Bindung. Ich würde jetzt den Weg des geringsten Wiederstands gehen: Für den Fall, daß mehrere Adapter vorhanden sind, wird Deine Anwendung oder Anwendungsinstanz an einen Adapter gebunden (z.B. per IP-Eingabe). So muß man es bei anderen Netzwerk-Tools auch häufig machen. Wenn ich mir jetzt z.B. die UDP-Multicast-Pakete meines Netzwerkdrucks ansehe, sendet dieser auch im Multicast seine eigene IP nochmals mit. Wahrscheinlich auch um dieses Problem einfach zu umgehen. Oder Du schreibst in die Dokumentation, daß bei mehreren Adaptern im System die Priorität über die Source-IP entscheidet, daher diese auch von den Clients per Route erreichbar sein muß. Als Admin würde ich sowieso die betreffenden IPs der anderen Zielrechner im DNS hinterlegen, damit die Clients des anderen Subnetz immer wissen, wo sie diese über den Multiforwarder des Server erreichen können. Früher hat man das ja über die lmhosts etc gelöst. Aber eine schönere Lösung fürs Programmieren sehe ich nicht. Ein Broadcast mit automatisch wechselnden Quell-IPs pro Adapter gibt es meines Wissens nach nicht. Gruß Assertor |
Re: [idUDPClient] Broadcast auf allen Interfaces raus senden
Zitat:
Also eine manuelle Bindung auf einen Adapter möchte ich eigentlich verhindern da ich ja eigentlich will, dass es auf allen Adaptern ein richtiger Broadcast gesendet wird. Die IP im Broadcast mitschicken ist auch nicht gerade zielführend da ich nicht genau was welche die richtige IP ist unter der mich dann alle Clients erreichen können. Ich habe mir noch eine andere Möglichkeit überlegt. Diese ist zwar nicht einfach aber für den User die beste Möglichkeit: Das Programm schaut beim Start nach welche Adapter und welche IP Adressen konfiguriert sind. Dann überlegt es sich anhand der IP und Subnet Maske wie der Broadcast aussehen muss. Bindet dann auf dem ersten Adapter und sendet dann einen beschränkten Broadcast raus und das bei allen Adaptern. Bsp: Ein Lan 1 (192.168.1.100, 255.255.255.0) und Lan 2 (10.0.1.100, 255.255.0.0): Als erstes Lan 1: Broadcast muss an die 192.168.1.255. Bind Adresse: 192.168.1.100 Dann Lan 2: Broadcast muss an die 10.0.255.255. Bind Adresse: 10.0.1.100 Verbesserungsvorschläge bzw. Ideen wie ich das am besten in einen Algorithmus packen könnte nehme ich gerne an :zwinker: |
Re: [idUDPClient] Broadcast auf allen Interfaces raus senden
Hi,
noch eine Überlegung: Warum drehst Du das ganze nicht einfach um? Die Software auf den Clients sendet solange einen UDP Broadcast, bis der Server sich verbindet. Der Server braucht dann nicht mit einem Broadcast zu antworten, sondern kann sich direkt z.B. per TCP zum Client verbinden - ohne jemals einen eigenen Broadcast senden zu müssen. Das schaut für mich irgendwie schöner und effektiver aus. Zusätzlich: - Das ganze natürlich mit Fehlerbehandlung bei C/S - Einer Client-Liste, die Du auf der Serverseite verwaltest (mit automatischer Entfernung, wenn über Zeitraum x der Client nicht erreichbar war und limitiert auf y Einträge) - Die Broadcasts in Intervallen (resourcenschonender), am Anfang z.B. alle 5 Sekunden, dann imme größere Abstände - Damit der Benutzer nicht ewig warten muß noch ein Start Broadcast vom Server, damit die Clients Ihr Broadcast-Sendeintervall wieder auf 5 Sekunden setzen Ich glaube, so würde ich das machen. Keine Konfiguration wegen der Multi-Interface-Geschichte. Gruß Assertor |
Re: [idUDPClient] Broadcast auf allen Interfaces raus senden
Zitat:
Es gibt keinen wirklichen Server, alles ist dezentralisiert! Aktuell läuft das ganze so ab: Client1 startet und sendet somit einen Broadcast "Ich bin Client1, gibt es noch andere Clients?" Client2 empfängt diesen und sendet direkt zu Client1 das Antwortpacket (UDP) "Ja mich gibt es auch, ich heiße Client2" Genau bei dem Antwortpacket von Client2 ist jetzt das Problem. Auf welche IP soll er dieses nämlich hinschicken? Da er nur die Soure-IP von dem Client über den Broadcast kennt muss er das Packet auf diese senden. (Solche zusätze das es in einem bestimmten Intervall den Boradcast sendet habe ich schon implementiert) |
Re: [idUDPClient] Broadcast auf allen Interfaces raus senden
Zitat:
Zitat:
http://www.aidaim.com/delphi_messeng...sdk_im_sdk.htm http://www.delphisource.com/componen...198&category=6 http://eldos.com/msgconnect/ http://www.lionknight.com/filexfer/Features.aspx Zitat:
Gruß Assertor |
Re: [idUDPClient] Broadcast auf allen Interfaces raus senden
Zitat:
Trotzdem danke für die Links. Beim 2 Link ist der Download down. Bei den anderen drei habe ich mir zwar angeschaut werde jedoch nicht ganz schlau daraus. Alle kann man kaufen und die Trail hilft mir auch nicht weiter. Und nur noch mal zur Info. Ich hab nur ein Problem mit dem Broadcast nicht mit der P2P funktionalität. :zwinker: |
Re: [idUDPClient] Broadcast auf allen Interfaces raus senden
Zitat:
Zitat:
Zitat:
Wenn Du dann eine gute Implementation gefunden hast, die für Deinen Bereich geht, baust Du es genauso auf. Gruß Assertor |
Re: [idUDPClient] Broadcast auf allen Interfaces raus senden
Zitat:
Angefangen hab ich mal mit Trillian ... dieses hat ein Lan Plugin. Folgendes Packet hab ich mitdumpen können:
Code:
Auf jeden Adapter sendet er mit der richtigen Source-IP. Warum kann das bei UDP nicht auch so einfach sein?
192.168.0.56 224.0.0.251 MDNS Standard query PTR _presence._tcp.local, "QM" question AAAA nbalex.local, "QM" question
Mal eine blöde Frage kann das ein Fehler der Winsocks sein das der UDP Broadcast so Problematisch gesendet wird oder hat es irgendeinen guten Grund warum er mit der "falschen" Source-IP sendet? |
Re: [idUDPClient] Broadcast auf allen Interfaces raus senden
Zitat:
Trillian sendet keinen Broadcast, sondern einen mDNS (Multicast DNS). Apple Bonjour macht das gleiche und viele andere (MS) auch. Lies Dir mal http://files.multicastdns.org/draft-...lticastdns.txt durch. Insbesondere was die Gruppe, den TTL und die Probleme mit miskonfigurierten Hosts (Dein nicht-routender-mehrfach-IP-PC) etc. angeht. Auch in Bezug auf Abschnitt 15. "Considerations for Multiple Interfaces" steht da einiges zu der Problematik. Gerade was Laptops mit LAN und WLAN-Schnittstellen angeht. Diese könnten u.U. überbrückt sein und würde Millisekunden später auf dem anderen Adapter als UDP/mDNS Multicast auftauchen. Für solche Multicasts gibt es in Indy den IPMCastServer und Client. Ich würde mal probieren, darüber etwas zu erreichen. Bei IPMCastServer mußt Du aber wieder die Bound-IP für den Ausgangsadapter festlegen (sonst vom System automatisch). Aber ein fertige, kostenlose Komponente die das alles für Dich erledigt kenne ich nicht. Wie meine Links oben Zeigen, läßt sich hiermit gutes Geld verdienen und es verschenkt niemand. Ich empfehle wirklich mal in die Sourcen von irgendwelchen P2P Implementationen zu sehen und die Logik für die mDNS/Broadcasts-Konnektivität entsprechend zu adaptieren. Dafür muß man ja kein C++ Guru sein :) Gruß Assertor |
Re: [idUDPClient] Broadcast auf allen Interfaces raus senden
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:55 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