Zitat von
gsh:
Aber ich werde ein paar andere P2P Programm analysieren.
Angefangen hab ich mal mit Trillian ... dieses hat ein Lan Plugin. Folgendes Packet hab ich mitdumpen können:
Code:
192.168.0.56 224.0.0.251 MDNS Standard
query PTR _presence._tcp.local, "QM" question AAAA nbalex.local, "QM" question
Auf jeden Adapter sendet er mit der richtigen Source-
IP. Warum kann das bei UDP nicht auch so einfach sein?
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?
Er sendet nicht mit der falschen
IP. Der Broadcast ist vollkommen richtig. Es wird die Priorität der Adapter vom System berücksichtigt (1. Seite hier mit den Routen). Das sollte und muß bei jedem anderen System auch so sein - unabhängig vom Betriebssystem.
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