[FRAGE] Hole-Punching
Übersicht

MynBetreff: [FRAGE] Hole-Punching |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Guten Tag Community,
ich habe mal wieder eine Frage, diesmal zum Thema "Hole-Punching". Für mein Projekt/Spiel "Antaris" habe ich mir einen UDP Multiplayer-Modus geschrieben. Ein Extra Server Programm und im Spiel intigriert den Client dazu. Nun ist mein Problem das der Client einen Port freigeschaltet haben muss, der Server ist egal, der kann ruhig einen freien Port brauchen^^... Mit Hilfe der Foren-Suche bin ich dann auf Hole-Punching gestoßen... Das habe ich so verstanden: Der Client sendet etwas an den Server und der Server ermittelt den Port+IPdes Client und speichert diese. Nun kann er an die IP+Port Daten senden...? 1. So geht es schon mal nicht (getestet ^^) 2. Wie genau geht es und wie setzte ich es in Blitz mit UDP um? Im Forum gibt es nur 2Themen zu Hole-Punching... und beide haben mich ehr verwirrt ^^ mfg Myn |
||
![]() |
TimBo |
![]() Antworten mit Zitat ![]() |
---|---|---|
es geht nur dann, wenn die Router die Ports nicht verwirbeln. Ansonsten kannst du es vergessen. Brauchst du wohl einen "vermittlungs Server" | ||
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31 hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht. |
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es ist auch etwas verwirrender als du beschreibst ![]() Solange der Server seinen port offen hat, würde es so gehn wie du beschreibst. Da das aber (wie du beschreibst ^^) nicht der Fall ist, braucht es einen "extra server" der als "Vermittler" dient. Da es für dich wohl nicht lohnenswert sein wird, so einen extra-server zu betreiben, nimm einen bestehenden: LamaNet SimpleUDP mfG, Christoph. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
Myn |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich hab z.B. bei meinem Router Port freigeschaltet, aber ein Freund konnte nicht auf den Server connecten... | ||
![]() |
TimBo |
![]() Antworten mit Zitat ![]() |
---|---|---|
das müsste allerdings funktionieren.
Haste das port forwarding richtig configuriert? |
||
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31 hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht. |
Myn |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wenn man als Client auf einen Server Connecten möchte, muss man die Server IP-Adresse und den Server Port angeben.
Dann sendet der Client ein bestimmtes Byte + den Spieler Name an den Server, der dann bei Eingang dem Client einen SLot zuweist, die SLot Nummer zurück sendet (z.B. 1 oder2 ,3..) und mit Hilfe von : Code: [AUSKLAPPEN] UDPMsgIP(udp)
UDPMsgPort(udp) die ClientIP+Port speichert... im Netzwerk funzt das alles auch wunderbar... //EDIT-> Ist es egal was für einen Port ich freischaltet, oder sind manche für UDP ungeeigent..? |
||
![]() |
tft |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
also da ich mich selber intensiv mit dem Thema auseinander gesetzt habe. Kann ich dir dazu folgendes sagen. Wenn du als Server hinter einem Router steckst. Kann es sein das dieser je nach Konfiguration nicht auf dem Port horcht oder sendet den du beim öffnen des Server angibst. Es ist absolut unumgänglich das du deinen Server an einer direkten IP ohne Router oder mit einem Router der die Ports richtig weiterreicht laufen lässt. Testen kannst du das nur indem du eine Server benutzt an dem du sicher bist das dieser eine direkte IP hat. Dort schickst du dann ein Packet hin und lässt dir anzeigen welcher Port wirklich benutzt wurde. Diesen musst du dann allen Clients mitteilen die mit deinem Server hinter dem Router verbindung aufnehmen wollen. Wichtig dabei ist auch das du zum lesen und Schreiben den gleichen Port benutzt wenn du auch Client/Client Kommunikation mit einbeziehen möchtest. Der Router lässt nämlich nur da Packete rein ... wo vorher welche rausgegangen sind. Eine sehr tückische Angelegenheit. Ansonsten gibts hir im Forum sowas das sich SimpleUDP nennt. Der Autor kann dir sicher weiterhelfen. Gruss TFT |
||
TFT
https://www.sourcemagic.ch Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!! |
![]() |
Hakkai |
![]() Antworten mit Zitat ![]() |
---|---|---|
Client <-> Client Kommunikation habe ich damals lange versucht und nie hinbekommen, es musste immer der Server einer von beiden Verbindungspartnern sein. | ||
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie ich dir schon gesagt habe, du brauchst ein drittes Programm, welches über die Router hinweg die beiden Programme verbindet.
Wenn du ein spiel Aufmachst, dann musst du dich mit diesem dritten Programm kontinuierlich in verbindung setzten (alle halbe sekunde oder jede sekunde eine Nachricht dahin reicht). Wenn jetzt ein Client sich mit dem Host verbinden möchte, dann schickt es eine Nachricht an das dritte Programm mit den Serverdaten (IP/Port). Das dritte Programm schickt jetzt eine Nachricht mit den daten des Clients(IP/Port) an diese HostIP/Port. somit weiß der Host jetzt, das ein Client mit der IP x und dem Port y sich mit ihm verbinden möchte. Also muss es nur noch den Port öffnen, das tut er mit dem senden von 0 Byte nachrichten zu dieser IP/Port, dadurch erwartet der router eine Nachricht über diesen Port. Der Client sendet während dessen ständig die Verbindungsnachricht zum Host. Hat der Host jetzt die Nachricht des dritten Programms gekrigt, so würde jetzt der Port bei dem router frei sein und die Nachricht kommt an. Vorrausetztung für all das ist natürlich, dass das Dritte Programm ständig erreichbar ist und dort, wo es läuft, alle Ports freigeschaltet sind, die diesen Programm benutzt (sollte aber eigl. nur einer sein) mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
tft |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo Toeb ....
dein Erklärung ist total richtig. Nur für jemanden der keine Ahnung ( Dich meine ich nicht damit ) hat fehlt ein Deteil das sehr wichtig ist. Die Daten vom Client müssen Serverseitig ermittelt werden und nicht vom Client gesendet. Der weis diese nämlich selber garnicht. Es reicht eine Nachricht mit 1 byte Daten. Die meisten öffnen eine UDP verbindung mit Port 4000 zum beispiel, und senden dem Server diese Information anstatt Server seitig UDPmsgIP und UDPmsgPort zu benutzen. Weil sie annehmen das muss ja gleich sein. Das pervide ist aber ..... das mir bereits Router untergekommen sind die nur Antworten von der Ziel IP empfangen. |
||
TFT
https://www.sourcemagic.ch Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group