AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Peer-To-Peer ohne Portfreigabe (WinSock)
Thema durchsuchen
Ansicht
Themen-Optionen

Peer-To-Peer ohne Portfreigabe (WinSock)

Ein Thema von blablab · begonnen am 12. Mär 2010 · letzter Beitrag vom 15. Mär 2010
Antwort Antwort
Seite 1 von 2  1 2      
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#1

Peer-To-Peer ohne Portfreigabe (WinSock)

  Alt 12. Mär 2010, 22:20
Hallo!

Ich möchte ein kleines Programm schreiben mit dem man Dateien zwischen mehreren Benutzern übers Internet übertragen kann. Bis jetzt benutze ich Winsock und das alles geht über einen Server. Das bedeutet die Daten gehen immer zuerst zum Server und werden dann an den entsprechenden Client weitergeleitet. Wenn hier nur 2 Clients sich gegenseitig Daten senden, wird das ganze schon enorm durch die Übertragungsrate des Servers ausgebremst. Um das zu verhindern würde ich die Daten gerne direkt von Client zu Client senden, also Peer-to-Peer. Das Problem ist, dass ich das bis jetzt nur so kenne, dass dazu die Clients Ports freigeben müssen. Das wiederum bedeutet, wenn jemand hinter einem Router sitzt muss er erst bei dem Router diesen Port freigeben. Und leider kriegt das nicht jeder hin und außerdem bin ich da selbst auch erstmal skeptisch, wenn ich für ein Programm als erstes einen Port freigeben muss. Deshalb frage ich mich, ob das auch irgendwie anders geht???
Kann ich Daten Peer-To-Peer versenden ohne vorher einen Port freizugeben? Von mir aus auch mit Portfreigabe aber irgendwie automatisiert, so dass der Benutzer nicht erst seinen Router einstellen muss. Gibt es da irgendeine Möglichkeit?

Ich frag mich auch wie das ganze denn beim normalen Surfen im Internet funktioniert. Da werden doch auch Daten von fremden Server empfangen und gesendet und dazu muss man doch auch nicht vorher einen Port freigeben...

Wie ihr seht kenn ich mich leider mit Netzwerken nicht besonders aus

Vielen Dank schonmal für eure Antworten!

Grüße
blablab
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#2

Re: Peer-To-Peer ohne Portfreigabe (WinSock)

  Alt 12. Mär 2010, 22:30
Ich glaube du müsstest UDP verwenden. Über den Server tauschen die Clients dann nur ihre IPs aus, und versuchen sich über UDP dann zu kontaktieren. Ich meine das fällt unter das Thema "stateful" Firewall. Erkundige dich mal danach

Hier isses: http://de.wikipedia.org/wiki/Statefu...ei_UDP-Paketen

HTH
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Peer-To-Peer ohne Portfreigabe (WinSock)

  Alt 12. Mär 2010, 22:53
Eine ( dumme ) Frage vorab hätte ich dazu:
Kann ich davon ausgehen, dass ein UDP-Paket ankommt und dass es keine Übertragungsfehler gibt?
Also mit "nicht ankommen" meine ich natürlich nicht, dass das Paket von einer Firewall gelöscht wird, sondern dass das Paket unterwegs einfach im Nirvana verschwindet...

Ich weiß dass bei TCP eine Verbindung aufbaut und wenn ich Daten sende, dann kommen diese auch richtig an (oder es tritt ein Fehler auf). Aber ich habe glaub ich mal gelesen, dass UDP-Pakete verloren gehen können. Und ich frage mich, ob ich bei UDP-Paketen so etwas wie eine Checksum brauche, oder ob dort auch durch das Protokoll dafür gesorgt wird, dass die Daten korrekt übertragen werden.

[Edit]
Ich versuche das gerade einmal auszuprobieren. Allerdings könnte das was werden...
[/Edit]
  Mit Zitat antworten Zitat
Benutzerbild von XHelp
XHelp

Registriert seit: 12. Jul 2004
Ort: Duisburg
172 Beiträge
 
Delphi 6 Enterprise
 
#4

Re: Peer-To-Peer ohne Portfreigabe (WinSock)

  Alt 13. Mär 2010, 05:38
Zitat von blablab:
Kann ich davon ausgehen, dass ein UDP-Paket ankommt und dass es keine Übertragungsfehler gibt?
Also mit "nicht ankommen" meine ich natürlich nicht, dass das Paket von einer Firewall gelöscht wird, sondern dass das Paket unterwegs einfach im Nirvana verschwindet...
Nein, davon kannst du nicht ausgehen.
UDP-Protokoll besitzt werde Mechanismen zur Fehlererkennung/-beseitigung noch gibt es eine Empfangsbestätigung.
Jedes Paket nimmt (kann) übrigens einen anderen Weg durchs Netzwerk. Du kannst also nicht mal garantieren, dass die Pakete in der Reihenfolge ankommen, in der du diese geschickt hast (du schickst P1, P2, P3 und es kommt an P2, P3, P1)

Portfreigabe bzw. allgemein Verbindungsaufbau ist einer DER Themen im p2p Bereich. Und es ist alles andere als trivial. Deswegen wirst du nicht ohne weiteres dir selber eine super Lösung zurecht bauen können. Ließ dir am besten Dokumentationen über offene p2p Netzwerke wie die es regeln (Stichwörter: STUN, UDP-Hole punching)

P.S. Beim Surfen baust du ja eine Verbindung zum WebServer auf. Bei dem WebServer muss der Port freigegeben werden, sonst wird das Ganze nicht funktionieren. Und sobald du eine Verbindung aufgebaut hast, kannst du (über TCP) in beide Richtungen senden.
Alex
Von allen Dingen die mir verloren gegangen,
hab ich am meisten an meinem Verstand gehangen
  Mit Zitat antworten Zitat
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Peer-To-Peer ohne Portfreigabe (WinSock)

  Alt 13. Mär 2010, 15:52
Danke für die Antwort, das hat mir sehr weitergeholfen. Ich bin die ganze Zeit am überlegen wie ichs jetzt machen soll...
Ich hab das jetzt so verstanden, dass das ganze ziemlich kompliziert ist und eigentlich gar nicht geht (bzw. gehen soll), man aber tricksen kann. Ich denke das ist mir aber zu viel Aufwand, weil ich wie gesagt nur ein "kleines Programm" schreiben möchte. Und allein die Umstellung von TCP auf UDP bedeutet wahrscheinlich schon einen riesen Aufwand. Ich weiß nicht ob ich so viel Zeit investieren möchte/kann. Und irgendwie gefällt mir die Vorstellung nicht "rumzutricksen". Ich will ja dass das Programm dann zuverlässig ist und ich weiß nicht ob das dann auch klappt.
Das bedeutet das Problem, dass der Server zu langsam ist, bleibt. Was eben auch sehr nervt ist, dass wenn ein Client eine sehr schlechte Internetverbindung hat, kann dieser die anderen Clients stark ausbremsen.
Leider fällt mir auch keine Lösung dazu ein...

Vielleicht habt ihr ja irgendwelche Ideen!?!
  Mit Zitat antworten Zitat
Benutzerbild von XHelp
XHelp

Registriert seit: 12. Jul 2004
Ort: Duisburg
172 Beiträge
 
Delphi 6 Enterprise
 
#6

Re: Peer-To-Peer ohne Portfreigabe (WinSock)

  Alt 14. Mär 2010, 13:55
Um dir eine genaue Antwort zu geben, sind leider viele Sachen unbekannt:
- wie groß dein "p2p Netzwerk" sein soll
- wie groß die Dateien in der Regel sind
usw.

Du könntest z.b. einfach nur einen anderen Server benutzen. Selber einen zur Verfügung stellen ist nicht so ganz das wahre, weil du dann an die (vermutlich) DSL Geschwindigkeit gebunden bist. Also könntest du bei ebay nach einem billigen Hosting suchen. I.d.R. haben die eine bessere Leitung.

Du kannst auch dein Programm auf ICQ oder Jabber aufbauen. Dann brauchst du dich selber um weniger Sachen kümmern.

Du kannst aber auch einfach nur eine gute Anleitung für Routereinrichtung erstellen.
Alex
Von allen Dingen die mir verloren gegangen,
hab ich am meisten an meinem Verstand gehangen
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Peer-To-Peer ohne Portfreigabe (WinSock)

  Alt 14. Mär 2010, 19:08
Zitat von blablab:
so dass der Benutzer nicht erst seinen Router einstellen muss.
Nach dem Motto: "Was der Benutzer nicht weiß, macht ihn nicht heiß"? Also bevor der Benutzer seinen Router selber richtig konfiguriert, soll dein Programm heimlich den Router umgehen? Und das macht dich weniger misstrauisch, als wenn du den Port selber von Hand freigeben musst?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#8

Re: Peer-To-Peer ohne Portfreigabe (WinSock)

  Alt 14. Mär 2010, 19:54
Zitat von Luckie:
Nach dem Motto: "Was der Benutzer nicht weiß, macht ihn nicht heiß"? Also bevor der Benutzer seinen Router selber richtig konfiguriert, soll dein Programm heimlich den Router umgehen? Und das macht dich weniger misstrauisch, als wenn du den Port selber von Hand freigeben musst?
Sag mal dem Ottonormalnutzer, er soll in seinem Router einen Port forwarden. Der wird dich aber mit großen Augen anschauen
  Mit Zitat antworten Zitat
Benutzerbild von XHelp
XHelp

Registriert seit: 12. Jul 2004
Ort: Duisburg
172 Beiträge
 
Delphi 6 Enterprise
 
#9

Re: Peer-To-Peer ohne Portfreigabe (WinSock)

  Alt 14. Mär 2010, 22:21
Zitat von NamenLozer:
Sag mal dem Ottonormalnutzer, er soll in seinem Router einen Port forwarden. Der wird dich aber mit großen Augen anschauen
Naja, und wieviele Ottonormalnutzer sind auf p2p angewiesen und haben auch keine einzige Person im Umfeld, die dennen weiterhelfen kann?

Und außerdem sind
"stell im Router ein Port forward ein"
und
"Bitte richten Sie im Router eine Portweiterleitung ein. Für mehr Informationen lesen Sie bitte das Benutzerhandbuch des Routers oder fragen Sie Ihren Internetanbieter"
völlig verschiedene Sachen.
Alex
Von allen Dingen die mir verloren gegangen,
hab ich am meisten an meinem Verstand gehangen
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#10

Re: Peer-To-Peer ohne Portfreigabe (WinSock)

  Alt 14. Mär 2010, 23:43
Man kann PortForwarding auch über UPnP erledigen.
Wer sich die Mühe machen will, könnte diesen Code (C#) übersetzen oder selbst umsetzen (und dann selbstlos der DP überlassen ).

Der "Ottonormalnutzer" hat UPnP sicher nicht manuell abgeschaltet.
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 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