P2P Netzwerke

kahuna

Erfahrenes Mitglied
löchen alle zusammen

hab mir vorgenommen, einen p2p Messenger zu schreiben.

mein problem ist nun, dass ich nicht verstehe, wie sich die verschiedenen übers internet verteilte pcs finden sollen.

also vielleicht hat schon jemand ein bissi erfahrung auf diesem gebiet, oder kennt einige gute links zum thema.

danke und gruss kahuna
 
2 Möglichkeiten, ganz allgemein:

1) Du hats irgendwo nen "Punkt" - wo sich die Clients "melden" und ihre aktuelle IP bekannt geben. Das kann z.B. auf nem Webserver passieren.

2) Du hast feste IP der Clients . garantiert, dann isses ganz einfach.

Chris
 
salve

an die erste möglichkeit habe ich auch schon gedacht, aber irgendwie sieht das für mich aus, als würde man damit das P2P wieder verletzen, da man trotzdem eine zentrale Komponente (=Server) im "Netzwerk" hat.

und zum zweiten: ausser durch dienste wie dyndns o.ä. ist das ja so gut wie unmöglich (und dem nutzer auch nicht unbedingt zumutbar).

wenn wir schon dabei sind: gibts irgendwelche performance tipps&tricks in .net im socket bereich? es gibt ja auch verschiedene möglichkeiten netzwerk kommunikation zu lösen (TcpClient.., Socket...) hast du da erfahrungen. ist es überhaupt empfehlenswert .NET zu verwenden, wenns um performance geht? oder eher c++ o.ä. ?

danke und gruss
kahuna
 
kahuna, bitte lies mal die Netiquette, oder einfach den roten Kasten unter dem Eingabefeld für Beiträge.
Ich meine damit, achte auf Groß-/Kleinschreibung, sonst sind irgenwelche Beiträge von dir einfach weg. ;)

wenn wir schon dabei sind: gibts irgendwelche performance tipps&tricks in .net im socket bereich? es gibt ja auch verschiedene möglichkeiten netzwerk kommunikation zu lösen (TcpClient.., Socket...) hast du da erfahrungen. ist es überhaupt empfehlenswert .NET zu verwenden, wenns um performance geht? oder eher c++ o.ä. ?

Eine Netzwerkandwendung hat sicher nicht die (Geschwindigkeits-)Anforderungen wie eine 3D Applikation wie die allseits beliebten Ego-Shooter.
Wäre .net wirklich so langsam, das es für nichts zu gebrauchen ist, würde die LonghornAPI nicht darauf aufbauen, etc.

MfG,
Alex
 
hallo

=D jaja deutsche Sprache schwere Sprache

aber noch mal zur Performance: Ich habe vorallem deswegen gefragt, weil in meinem Messenger (wie auch in Programmen wie ICQ & MSN) Dateien übertragen werden können. Deshalb wollte ich wissen ob z.B. c++ Sockets oder C Sockets schneller sind als .Net Sockets.

gruss kahuna
 
Ad Deutsche Sprache,
jaja, schwer ist sie schon. Dennoch eine einfache Regel wie jene, welche besagt das Satzanfänge groß geschrieben werden, sollte jedem bekannt sein.
Bitte achte darauf, die Lesbarkeit steigt enorm.

Ich denk die Socketgeschwindigkeit dürfte auch ausreichen. ;)
 
Es gibt auch die (zugegeben, recht umständliche) Möglichkeit, dass jeder Client eine Liste mit Clients unterhält. Wenn du dich mit einem Client verbindest, schickt er dir seine bekannten Clientadressen und umgekehrt. Natürlich wird das vollständige Synchronisieren dieser Listen nicht möglich sein. Du musst einen stabilen Netcode haben, der es auch verkraftet, wenn halt nur die Hälfte der Clients antworten.

Ein Beispiel: Wir haben ClientA, der ist offline und ClientB, der an ein Netz von ClientsXYZ angeschlossen ist.

ClientA meldet sich bei ClientB an.
Für ClientA stellt ClientB den Server des Netzwerks dar. Dieser liefert ihm die Adressen der ClientsXYZ.
ClientB meldet auch all seinen anderen bekannten Peers, dass ClientA neu hinzugekommen ist und ClientsXYZ nehmen ihn in seine Liste auf.
Wenn ClientA sich wieder ausloggen will, meldet er sich bei "seinem Server" (also ClientB) ab und dieser erledigt den Rest für die anderen Clients.

Natürlich kennt auch ClientB einen "Server", der ihm aktualisierte Adressen bereitstellt.

Der grösste Nachteil dieses Netzwerks: Je mehr Client/Server-Stufen es gibt, desto mehr Administrationsbandbreite wird benötigt, um die Informationen an den "obersten" Client weiterzuleiten.

P.S.: Das ist nur Theorie...
 
Also wenn ich das nun richtig verstanden habe, komm ich eigentlich gar nicht gescheit um einen Server herumkomme. Sunrays Idee wäre da eine Abhilfe, aber ich kann mir nicht vorstellen, dass sich der Aufwand lohnt, eine solche Lösung umzusetzten.

Eine Frage zu dem Server. Was denkt ihr ist da eine optimale Wahl, eine einfache Datenbank, oder einen selber implementierten Server (ich tendiere eher zum Eigenbau =D)

gruss kahuna
 
Hi
Ich selber würde einen einfachen Webserver nehmen der php und mysql unterstütz und dann einen kleinen Script für die Abfrage und das Eintragen der eigenen IP benutzen.

Noch ein Tipp:
Du musst bedenken das nicht jeder Client geleichzeitig über "Server-Funktionen" verfügt, er könnte hinter einem Router sitzen der keine Verbindungen von außen annimmt.

Ich hoffe ich konnte dir ein bischen helfen.
Sonst geh doch mal auf die Website :
http://www.danielgrunwald.de/network/
Dort gibt es ein ganz gutes P2P Programm

Schönen Tag noch
Willblau
 
Warum PHP und MySQL wenn er es mit .NET macht?

Mach entweder ne kleine Anwendung oder besser einen Dienst, und arbeite mit HTTP-Requests auf Port 80, damit hast mit keiner Firewall und keinem Router Stress. Kannst halt auf dem Rechner dann auf Port 80 keinen Webserver laufen haben. Solltest doch einen laufen haben, dann nimm Port 8080 (Proxy-Port).

Eine andere Möglichkeit wäre natürlich ein WebService. Darüber könntest den Server auch abbilden.

Norbert
 
Zurück