Sascha Geschrieben 2. Januar 2012 Melden Share Geschrieben 2. Januar 2012 Hallo miteinander, ich bin mich nicht das erste Mal dabei, mir wegen Unitys Multiplayer die Haare auszureißen... Grund ist mal wieder das NAT-Problem, wenn man sich zu einem Host verbinden will, der hinter einem Router sitzt, also immer, wenn's über's Internet gehen soll. Jede Art von Diskussion darüber läuft darauf hinaus, dass der Host Ports freigeben und selber forwarden muss. Das will ich vom Durchschnittbenutzer einfach nicht verlangen müssen. Und laut dieser Seite muss ich das auch nicht, dazu gibt's ja NAT Punchthorugh. In the old days your users would have to go to their router configuration screen and setup a mapping. However, in modern applications users are not usually required to do this, thanks to NatPunchthrough. Mit dem Master Server soll ja genau das gemacht werden, aber egal, wie ich herumbastele, ich kann als Client nie zu einem Host verbinden, der hinter einem Router sitzt. Warum funktioniert NAT Punchthrough nicht, jemand eine Ahnung? Und ja, mir ist bewusst, dass man sich in der Regel insgesamt ärger erspart, wenn man sich ein externes Network-Plugin besorgt, und trotzdem würde ich gerne wissen, was da wohl schief läuft... Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Schlumpf Geschrieben 3. Januar 2012 Melden Share Geschrieben 3. Januar 2012 es gibt nur meiner bescheidenen Meinung nach nur 2 brauchbare wege : a.) du stellst einen "tunnel" zwischen beiden clients der über einen server geht und die 2 direkt verbindet (der server wird nur zum aufbau der verbindung gebraucht und zum halten derer, extreme gefahr des daten manipulieren) dieser server prüft und managed keinerlei userdaten er verbindet nur b.) du stellst einen server der die daten von a bekommt, prüft auf konsistenz und dann an b weitersendet (was so niemals gemacht werden darf ) Grundregel : traue keinerlei daten des client nicht mal dem benutzernamen pw wenn dann gehst du her und lässt dir als server die daten geben und prüfst sie gegen. z.b. ob die alte spielerposition mit der momentanen in der zeit möglich ist > ja ok >nein kickban oder ob die position überhaupt erreichbar ist und vieles mehr ich teste grad weg b über einen socket server den ich gerade am testen bin ( eigenkonstruktion ) unityportierung ist in arbeit weil ich keinen bock habe das sowas wie bei photon nochmal passiert und die plötzlich 10dollar im monat wollen *tzz Photon Indie Features Indie License conditions Licensee's monthly gross revenue is below US$ 10,000 Licensee's product displays the Exit Games Photon logo prominently (in splash screen or credits) Choose your Photon Indie License, Download and Start Get your FREE fully featured 30 days trial at aso zum thema deiner natPunchthrough geschichte schau mal hier: http://www.jenkinsso...nchthrough.html Server Implementation Host a server somewhere, not using NAT / e.g. behind a firewall. (RakNet provides a free one, however you may wish to host your own for consistent uptime). Create an instance of the plugin: NatPunchthroughServer natPunchthroughServer; Attach the plugin: rakPeer->AttachPlugin(&natPunchthroughServer); Don't forget to call RakPeerInterface::Startup() and RakPeerInterface::SetMaximumIncomingConnections(MAX_CONNECTIONS); demnach nutzen die auch einen masterserver einen anderen weg gibt es nicht denke doch mal drüber nach client a ( keine portfreigabe ) (verweigert die annahme von allen datenpaketen die nicht angefordert wurden) client b ( keine ... genau : keine portfreigabe ) (verweigert die annahme von allen datenpaketen die nicht angefordert wurden) wie sollen die 2 sich direkt verbinden ? das ist ja der sinn der it das das nicht geht Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 3. Januar 2012 Autor Melden Share Geschrieben 3. Januar 2012 Wenn ich die Beschreibung von NAT-P (dessen Link ich btw auch schon postete) richtig verstanden habe, läuft das so: Host trägt sich beim Masterserver mit ip des Routers und Port für NAT auf sich selber ein Client holt diese Infos vom Masterserver Client sendet Daten über ip und Port => müsste ankommen dank NAT Punchthrough ... und wartet auf Antwort (Paket angefordert), die der Host zurück schickt Dann wieder ab Punkt 3 Leider sieht man davon nochts... Mit Photon bin ich auch so ein bisschen am schräg gucken. Hab mir das mal angeschaut, und wie es aussieht, müsste ich mir dafür ja nen Windows-Server irgendwo hinstellen. Meh. Was Möglichkeit a) angeht: Du sagst das so einfach, "erstell nen Tunnel"... Netzwerkprogrammierung ist nicht wirklich mein Ding und der Beschreibung nach ist NAT Punchthrough eine gute Lösung für das Problem. Prinzipiell wollte ich es vermeiden mir da jetzt ein komplett eigenes Netzwerksystem zu basteln und hatte gehofft, nutzen zu können, was schon da ist. Man muss ja nicht immer das Rad neu erfinden Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Schlumpf Geschrieben 3. Januar 2012 Melden Share Geschrieben 3. Januar 2012 brauchst keinen win root ich hab meinen socket server ( masterserver oder wie man ihn auch nennen will ) unter .net geschrieben und auf nem debian 6 in wine laufen ohne probleme deinen link habe ich schon gesehen ( is ja der selbe wie meiner ) nur wegen dem kommentar den ich geschrieben habe habe ich den link nochmal fürs verständniss dazugeschrieben photon kann man wie gesagt vergessen weil die nach 30 tagen 10 dollar im monat wollen redfox bzw redfox 2 damit werde ich nicht warm also nen eigenen server schreiben was nicht das zum thema deines postings über dem hier : der masterserver ist a) deiner oder von ranknet also : wieder nen server der die 2 clients verbindet xD siehe hier ganz unten die bilder http://www.jenkinsso...nchthrough.html vielleicht habe ich es auch beim überfliegen nicht korrekt gelesen ( mein englisch is ned so 100% ) aber so wie ich das sehe nutzen die immer einen master oder http://de.wikipedia....l_Plug_and_Play problem ist Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 3. Januar 2012 Autor Melden Share Geschrieben 3. Januar 2012 Was die Photon-Lizenz angeht - kann es sein, dass sie die gerade geändert haben? Angeblich gibt es anstatt der 30-Tage-Lizenz jetzt eine unbegrenzte, und PhotonControl.exe sagt mir auch, dass die nicht abläuft...? Leider hilft mir das alles nicht bei meiner ursrpünglichen Frage: Warum kann ich nicht connecten? Datenintegrität ist ja schön und gut, aber das juckt mich ja erst wenn ich überhaupt kommunizieren kann... Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Schlumpf Geschrieben 3. Januar 2012 Melden Share Geschrieben 3. Januar 2012 http://shop.exitgames.com/ Choose your Photon Indie License, Download and Start Get your FREE fully featured 30 days trial at http://www.exitgames.com wie gesagt ich habe genug von den lösungen wo dann später doch geld kosten drum meine eigene. kannst du mal ein bild bitte malen und darin deine momentane konstellation aufzeichnen ( mit pseudo ips ) also nicht den "echten" damit man mal sehen kann bzw testen kann was wo wie sich überhaupt sieht was du machen kannst : per sonsole unter windows ping und tracert bischen nutzen bzw unter linux genauso unter mac sollte sowas aber auch zu finden sein damit kannst du dann schonmal die einzelnen teilnetze prüfen ob du da überhaupt eine verbindung bekommst. ( firewall ftw ) Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
malzbie Geschrieben 3. Januar 2012 Melden Share Geschrieben 3. Januar 2012 Ich habe mit den Netzwerkdingen von Unity zwar noch garnix gemacht, aber trotzdem will ich mich mal zu Wort melden. Wenn du jetzt eine Verbindung zwischen 2 Rechnern aufbauen willst, ohne einen Server zu nutzen, dann musst du ja die IP Adresse des DSL Anschullses kennen. Wie du auch schon bemerkt hast, geht das jetzt so ohne weiteres nicht durch. Dafür brauchst du "immer" einen Port und der Roter, also dessen Firewall, muss diesen Port frei gegeben haben. Da kommst du nicht drum herum. Nutzt dein Spiel einen Port, der schon frei ist wie z.B. 8080 müsste es möglich sein, dass die Verbindung sich aufbaut. Auch ohne forewarding. Problem dabei: Der Router weiss nicht zu welchem Rechner er das Packet schicken soll, wenn mehrere Rechner im Netz sind. Wenns richtig läuft sollte er es an alle schicken. Aber wie dem auch sei, wenn dein Programm auf Rechner A weiß welchen Port es für das Programm auf Rechner B nutzen soll, dann musst du auch eine Verbindug zu dem Rechner hinbekommen. Das jetzt alles ohne Server, der die einzelnen Verbindungen verwaltet. schau dir dazu mal UDP bei Wikipedia an: http://de.wikipedia.org/wiki/User_Datagram_Protocol Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Schlumpf Geschrieben 3. Januar 2012 Melden Share Geschrieben 3. Januar 2012 malzbie: war ich mal wieder zu umständlich Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
malzbie Geschrieben 3. Januar 2012 Melden Share Geschrieben 3. Januar 2012 Hehe. Ja also ich hatte da schon Schwierigkeiten dir zu folgen. Ich glaube du sprichst da von was anderem. Der Text war aber an den Sascha gerichtet, nicht an dich. Dein Post hatte sich nur dazwischen gemogelt. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Cyborg Geschrieben 4. Januar 2012 Melden Share Geschrieben 4. Januar 2012 Stimme malzbie zu. Wenns nicht über nen Standardport wie 80, 8080 usw. geht, muss der Port am Router zu 99,9% geöffnet werden. Fast in jedem Fall (ohne Master Server) benötigst du eine Port-Weiterleitung, in der Theorie ist es zwar so wie malzbie es beschreibt, jedoch funktioniert es in der Praxis auch nicht ohne Probleme. Bei den Standardports bekommste somit Probleme, leitest Port 80 um haben alle anderen Rechner im Netzwerk kein Internet mehr. Port 8080 wird mittlerweile von vielen Programmen wie Virenscannern, Firewalls, Remote Programmen, Proxys (alles client seitig) als Sekundärport zur Kommunikation verwendet. Ich empfehle tatsächlich einen eigenen Port + Master Server Der Unity Master Server erfüllt seinen Sinn und Zweck eigentlich sehr gut (habe einen eigenen auf meinem Debian Webserver am laufen), ich kenne aber die Problematik die du beschreibst. Dadurch, dass der Client zuerst eine Verbindung über den Router zum Master Server aufbaut, wird bereits eine Route eingerichtet, welche dem Master Server mitgeteilt wird, somit ist bereits ein korrekter Kommunikationsweg beim Server bekannt. Wenn du die Flinte noch nicht ins Korn geworfen hast, können wir das Ganze heute Abend mal via Teamspeak oder Skype live testen. Gruß Cy Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 4. Januar 2012 Autor Melden Share Geschrieben 4. Januar 2012 Gerne! Diesbezüglich liegt eine PN in deinem Postfach Dein Post macht zu dem Thema echt Hoffnung, klingt, als hätte ich da nur irgendwas falsch gemacht ^^ Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.