[UDF]SynVar & [Frage]UDP NAT traversal?

07/28/2017 03:14 FacePalmMan#1
Hallo Leute! Endlich poste ich mal wieder was. Ich hoffe es gefällt euch.

Also. Da ich gerne mal mit TCP rumspiele und auch mal Multiplayergames anfange zu programmieren, nervt es mich (bzw. ist zeitaufwendig) immer das ganze Zeugs mit den fetten (2D) Arrays zu machen. Also habe ich eine UDF geschrieben, die Variablen mit dem Empfänger austauscht.

Und zwar nimmt die SynVar UDF euch ein wenig Arbeit ab indem sie die Paketerstellung, Versand, Empfang und Verarbeitung macht. Also so ziemlich alles. Zusätzlich bietet die UDF eine Paketstrukturierung, die sehr effizient und effektiv ist.

Ich arbeite noch ein wenig an der UDF, denn wie man schnell feststellt, unterstützt es kein UDP. Bekannte Spiele wie Minecraft benutzen soweit ich weiß UDP zum übermitteln von Positionen etc. Ich möchte UDP einbauen, da ich in dem Beispielspiel wegen dem TCPRecv nur 10 FPS habe.

Ich habe das mit UDP noch nicht versucht, aber ich vermute es wird sehr schwierig, da UDP soweit ich weiß nur in eine Richtung geht. Deswegen frage ich euch mal: Wäre es möglich? Und wenn ja, dann auch ohne NAT traversal? Und wenn es nur mit NAT traversal geht, wie wäre es dann in AutoIt umsetzbar?

Hier die UDF:

Hier das TestSpiel:

Und hier der Server zum Spiel:
07/28/2017 10:46 BladeTiger12#2
Hallö FacePalmPan!

Zuerst einmal, wieso sollte UDP nur in eine Richtung gehen?
Das würde gar keinen Sinn ergeben.

Du bräuchtest vorher nur etwas, dass beide Clienten miteinander "verbindet".
Vielleicht einen TCP Server der jeweils die IP|Port dem anderen zusendet.

Also einfach ohne NAT Traversal? Ja... Wenn du einen Port hardcodest, der frei ist.
(Wird wohl zu 100% nicht auf jedem Rechner gehen. :P)

Also letztendlich brauchst du es auf jeden Fall. Was soll sonst ansagen, welcher
Client mit wem verbunden werden soll unter welcher IP und Port.
07/28/2017 13:58 FacePalmMan#3
Danke für die kleine Belehrung.
Ich hab mal in UDP wegen der Beidseitigkeit reingeschaut und rumprobiert. Ich habe erstmal ein wenig gebraucht, aber irgendwann wurde mir klar, dass der Server "zurückconnecten" muss. D.h. Der Client sendet ein Paket, der Server empfängt ihn mit flag 2, (zum Anzeigen von IP & Port des Clients) connected zum Client und kann ihm dann zurückschreiben.

Ich mach mich mal auf den Weg das Ganze auf UDP umzuschreiben. Am besten als "eigene" UDF. (Und am besten auch eine UDP hole punching UDF)


€dit:
Ich habe ein kleines Problem. Und zwar habe ich angefangen einen Testclient zu schreiben, mit dem ich dann die Verbindung testen kann. Ich habe aber dann, als ich es mit jemandem zwischengetestet habe, festgestellt, dass vom Masterserver keine Antwort kommt. Es hat sich herausgestellt, dass der Server anscheinend nur im lokalen Netz über UDP antworten kann. Was mache ich falsch? Und wie geht es richtig?
Hier die Scripts mit denen ich das auch getestet habe:
Client:
Server:

€dit 2:
Problem gelöst. UDP hole punching scheint jetzt zu funktionieren. Muss nur noch testen, dann kann ich es in eine UDF klatschen, bzw. mein Projekt, welches UDP hole punching benötigt, fortführen.