Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
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.
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.
@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!
@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.
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.
Hier eine Vorlesung zu P2P Kommunikation, hilft evtl.:
YouTube
An dieser Stelle steht ein externer Inhalt von YouTube, der den Forumbeitrag ergänzt. Er kann mit einem Klick geladen und auch wieder ausgeblendet werden.
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.