Peer to Peer Programmierung

EricFalbeKarlsr

Cadet 4th Year
Registriert
Juli 2021
Beiträge
65
Ich möchte eine Peer to Peer Anwendung entwickeln, die ohne Server verschiedene Computer miteinander über das Internet verbindet. Wer kennt sich damit aus? Gibt es dafür Handbücher oder Anleitungen? Welche Programmiersprache ist dafür a, besten geeignet?
 
Bei Peer-to-Peer fungiert jeder Client auch als Server, den gibt es also immer. Programmiersprache geht dafür jede. Wenn es auf verschiedenen Systemen laufen soll, wäre Java z.B. eine Wahl.
 
Wie Toren geschrieben hat eignet sich prinzipiell jede Sprache dafür.
Für eine bessere Eingrenzung müsste man daher noch mehr über die geplante Anwendung wissen.

Normalerweise wählt man auch eher eine Sprache mit der man vertraut ist.
Geht es darum überhaupt mal das Programmieren zu erlernen und dies soll ein Einstiegsprojekt werden?

Ich persönlich würde eher .NET (C#), Rust, Go, Python3, TypeScript (node.js) je nachdem wie der Rest der Anwendung aussehen soll (Browser? Handy-App? Windowsprogramm? Auch Linux? GUI oder CLI? etc.) und wie performant das ganze werden soll und eben wie vertraut man schon in einer Sprache ist vorschlagen.
 
EricFalbeKarlsr schrieb:
Ich möchte eine Peer to Peer Anwendung entwickeln, die ohne Server verschiedene Computer miteinander über das Internet verbindet. Wer kennt sich damit aus?
Antwort: Du offensichtlich nicht und das kann ungeahnte Folgen haben, wenn du ohne KnowHow eine Anwendung schreibst, die aus dem Internet erreichbar ist.
Ich rate dir dringend, dich erstmal grundsätzlich mit Netzwerkkommunikation auseinanderzusetzen, bevor du dich mit sowas ins Internet traust. Und selbst mit dem nötigen Wissen würde man sowas eher mit einem VPN lösen.
 
  • Gefällt mir
Reaktionen: guzzisti, Nilson und TorenAltair
Peer to Peer und ich lese nur Filesharing am Ende...

Oder hast du eine weitreichende neue Idee die sonst noch niemand umgesetzt hat?
 
@TorenAltair: Ich kenne mich eher mit C++ aus. Gibt es irgendwo gute Beispiele für peer to peer - Kommunikation und Datenaustauch?
@SirKhan: Das ist noch geheim. Aber soviel kann ich sagen: Es soll von mehren(es sollten sehr viele sein können) Daten via peer to peer ausgetauscht werden können.
Ich habe schon ein paar Sachen in C, Assembler, C++, Turbo Pascal und dem visual Studio von Microsoft erstellt, aber nichts überaus kompliziertes.
Wieso eher C# als C++? Es soll eine Windows-Anwendung werden.
@Raijin: Wo findet man etwas gutes über die Netzwerkkommunikation? Ich habe schon einiges über ein Netzwerk-Socket, die CSocket-Klasse und die Winsock API gelesen, aber nichts über die direkte Verbindung ohne Server über das Internet finden können.
Wie über VPN? Das dient doch nur zum Datenschutz, oder?
@xxMuahdibxx: Ja, ich habe auch fast nur etwas über filesharing gefunden. Aber auch etwas über chats. Ja, es soll eigentlich etwas grösseres werden. Ein ganzen Internetportal!
 
EricFalbeKarlsr schrieb:
Gibt es irgendwo gute Beispiele für peer to peer - Kommunikation und Datenaustauch?
Vielleicht willst du dir die Arbeit dafür auch einfach sparen, und existierende Bibliotheken nutzen, die dir P2P Kommunikationsmöglichkeiten geben ohne, dass du alles selbst implementieren musst:
https://github.com/libp2p/libp2p
https://github.com/yggdrasil-network/yggdrasil-go
https://github.com/matrix-org/pinecone

EricFalbeKarlsr schrieb:
@Raijin: Wo findet man etwas gutes über die Netzwerkkommunikation? Ich habe schon einiges über ein Netzwerk-Socket, die CSocket-Klasse und die Winsock API gelesen, aber nichts über die direkte Verbindung ohne Server über das Internet finden können.
Wie schon gesagt wurde, heißt P2P eigentlich, dass jede App Client und Server zugleich ist. Grundsätzlich kann man da die gleichen Tools wie bei normaler Client-Server Kommunikation nutzen.
Aber es kommen eben schnell Probleme auf, auf die man stößt und zusätzlich machen muss.
Beispielsweise Hole Punching, wenn das Gegenüber zu dem man sich verbinden möchte, hinter NAT sitzt.
Oder, wenn Nutzer eine andere IP-Addresse bekommt - wie findet man sich dann wieder?
Was macht man, wenn das Gegenüber gerade keine Internetverbindung hat?

EricFalbeKarlsr schrieb:
Wieso eher C# als C++? Es soll eine Windows-Anwendung werden.
1. C# ist DIE Programmiersprache für Windows.
2. Grundlos C++ nutzen, ist wohl sicherheitstechnisch schon fahrlässig
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: SirKhan
Ein Internetportal wird aber nix ohne Server..

Ich denke definitiv das Vorstellung und Realität zu weit abweichen.

Und ab Datenaustausch wird's eh mit der Legalität ein Problem...
 
Wie schon geschrieben sind C/C++ sicherheitstechnisch einfach nicht mehr auf der Höhe, da man viel zu leicht Fehler einbauen kann. Moderne Sprachen dagegen verhindern viele gängige Fehler direkt. Deswegen ist es ratsam neue Projekte direkt in einer modernen Sprache anzufangen. Ich finde Rust richtig gut, auch wenn es anfangs etwas gewöhnungsbedürftig ist und es einem sehr viel verbietet. C# dagegen ist wesentlich einfacher und hat auch (gerade unter Windows) sehr gute GUI-Tools. Und es gibt auch sehr viele Anleitungen und Tipps im Internet.

Die genannten Bibliotheken klingen auch recht gut. Ich selbst habe mit P2P noch nichts gemacht, aber ich kann mir vorstellen dass die Clients sich ja doch irgendwie finden müssen. Das geht entweder im lokalen Netz mittels UDP-Broadcasts oder ähnlichem um sich bekannt zu machen oder über dedizierte Verwaltungsserver (Loginserver) im Internet, sofern man nicht IPs manuell eintippen will.
 
@KitKat::new(): Welche Tools gibt es für die normale Client-Server Kommunikation?
@xxMuahdibxx: Wieso? Der mIRC-chat z.B. funktioniert doch auch ganz ohne Server, oder?
@SirKhan: Danke für die Tipps! Ich schau mir mal Rust an. Scheint für Linux zu sein, oder?
 
Rust läuft auch unter Windows super. Mit VS Code kann man auch super entwickeln. Falls die Anwendung eine GUI haben soll, würde ich aber dennoch eher nach C# schauen, da die GUI-Entwicklung mit dem großen Visual Studio dann doch einfacher ist.

IRC hat irgendwie mit DCC eine Möglichkeit Daten direkt zwischen Clients zu tauschen aber da müssen sich die Clients auch erst entweder über den IRC-Server oder einen DCC-Server kennen. Einen Server braucht man in beiden Fällen. Ohne geht, wie oben geschrieben, nur lokal, da die Internetprovider (verständlicherweise) keine Broadcasts zulassen.
 
Aber sicher brauchte IRC Server.. musste mich damals immer darauf verbinden ...

Quakenet z.b.

Wie soll sich reine Client basierte Programme im Internet finden?

Mal über dieses Grundlegende Problem nachgedacht?

Dein gesamtes Grundkonzept noch Mal durchkauen, wo hast du Ahnung von wo fehlt dir Wissen..oder Grundlagen. Was kannst du schon umsetzen.

Wenn das Gerüst zu instabil ist nochmal überdenken ob es Sinn macht.
 
Das mag ja sein aber auch Mal überlegt welcher User gerne fremde Daten auf seinem PC dem Netzwerk zur Verfügung stellt?

Mache ich mich als Hoster von Datei A strafbar weil User A diese ins Netzwerk eingestellt hat aber sie auf meinem Rechner mit zur Verfügung steht.

Das ganze ist wie Napster oder Torrent am Ende..
 
xxMuahdibxx schrieb:
Das mag ja sein aber auch Mal überlegt welcher User gerne fremde Daten auf seinem PC dem Netzwerk zur Verfügung stellt?
Woher die Unterstellung dafür, dass überhaupt fremde Daten zur Verfügung gestellt werden?

EricFalbeKarlsr schrieb:
@KitKat::new(): Welche Tools gibt es für die normale Client-Server Kommunikation?
Die üblichen libraries der Programmiersprachen z.B.?
https://learn.microsoft.com/en-us/dotnet/api/system.net.sockets?view=net-7.0
https://doc.rust-lang.org/std/net/index.html

Hier eine Vorlesung zu P2P Kommunikation, hilft evtl.:
 
KitKat::new() schrieb:
Woher die Unterstellung dafür, dass überhaupt fremde Daten zur Verfügung gestellt werden?

Alleine aus der Sicht eines Internet Portals... Wie stellst du Dateien für die Allgemeinheit bereit wenn kein realer Server existiert?

Nur wenn User A online ist oder andere User die auch diese Datei anbieten?
 
xxMuahdibxx schrieb:
Nur wenn User A online ist oder andere User die auch diese Datei
Welche Datei?
Und: kommt darauf an, was und wie er das implementiert
 
@KitKat::new() du hast dir schon durchgelesen was der TE so plant?
 
guzzisti schrieb:
Aber nicht wie üblich: Im Gegensatz zu WhatsApp, Signal & Co gibt es nicht unbedingt nur einen zentralen Server, sondern es gibt verschiedene Server, die als eine sogenannte Föderation miteinander kommunizieren. Jeder Server kann eigene Nutzer haben, aber es können trotzdem Nutzer verschiedener Server miteinander kommunizieren.

Email, Matrix, Mastodon und XMPP funktionieren ähnlich.
Man könnte es als P2P mit Supernodes interpretieren, als hybride Form.
 
Zuletzt bearbeitet:
Zurück
Oben