Multiplayer Server auflisten

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Milgo

Betreff: Multiplayer Server auflisten

BeitragDi, Aug 18, 2009 21:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Smile

Ich bin dabei ein Spiel zu machen, welches auch einen Multiplayer behandeln soll. Eines meiner Ziele ist es, alle gehosteten Spiele aufzulisten, ich habe aber keine Idee wie das funktionieren soll.

Ich habe mir das Robsite-Tutorial durchgelesen - mit "HostNetGame" startet man ja ein Netzwerkspiel, mit "JoinNetGame" kann ein anderer darauf zugreifen, allerdings muss bei JoinNetGame ja der Spielname und die IP vorgegeben werden. Ich würde aber gerne alle mit HostNetGame gestarteten Spiele auflisten (und das natürlich ohne die blöde DirectPlay-Box). Mir ist aufgefallen, dass ich für die IP 0 angeben kann - dann wird ein beliebiger Server gesucht, aber ich würde ja gerne wirklich mehrere Server auflisten. Ist das irgendwie möglich, oder muss ich dafür auf UDP oder dieses TCP aufweichen (wobei letzteres irgendwie nicht bei Robsite behandelt wurde?).

Wenn es so einen Thread schon geben sollte steinigt mich bitte nicht, ich habe ihn dann einfach nicht gefunden.

Tankbuster

BeitragDi, Aug 18, 2009 21:31
Antworten mit Zitat
Benutzer-Profile anzeigen
UDP oder TCP. Direct Play ist langsamer, und nichtmehr ganz so modern, will ich jetzt mal sagen.

Das ganze solltest du mit einem Server machen. Dieser verwaltet die Liste der gehosteten Spiele, und alle Clients können dann dort zugreifen. Ebenso können Clients natürlich an den Server senden, dass sie ein Spiel hosten.

Das ist aber ziemlich schwierig für den Anfang Wink
Twitter
Download Jewel Snake!
Windows|Android

Holzchopf

Meisterpacker

BeitragDi, Aug 18, 2009 22:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Eines mal vorneweg: Wenn du noch im Robsite-"Alter" (verzeiht mir den Ausdruck) bist, dann lass die Finger von Netzwerkkrams Wink das ganze ist nicht so unkomplex, wie viele meinen. Und sehr viele sind schon daran gescheitert. Und scheitern ist nie was gutes Rolling Eyes

Für später - sag ich jetzt mal, in der Hoffnung, ernstgenommen zu werden - kann ich dir empfehlen, dass ganze auf einem Server mit einem kleinen PHP-Script zu erledigen. Der Host meldet sich via TCP beim Script an, Script aktualisiert Liste, Client lädt via TCP die Liste runter - et voilà, schon hat man die Serverlist. Zusätzlich könnte man dann noch einfügen, dass die Liste auch über ein Script geladen wird, welches beim Aufruf nuch kurz alle Server aus der Liste löscht, die in den letzen ~10 Minuten nicht mehr von sich hören liessen, um Ghosts zu entfernen etc...

mfG

PS: Irgendwo gabs doch mal ne Liste voller Argumente gegen DirectPlay? Hat die grad jemand griffbereit?
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

ToeB

BeitragMi, Aug 19, 2009 13:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Oder falls du wirklich noch nie vorher was damit zu tun hattest, nimm meine SimpleUDP - Lib. Die ist ähnlich aufgebaut wie Direct play, nur viel kürzere Ladezeiten, schnellere Verbindungen und eine Function ist auch dabei : UDP_CountServers. Damit kann man alles verfügbaren Spielserver im Netzwerk anzeigen lassen. Willst du die Listen Online sichtbar machen, dann musst du MySQL,php und sonstwas können (ich kanns auch net aber ich arbeite mich rein´und schreib da auch später in die Lib).

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!

Milgo

BeitragFr, Aug 21, 2009 21:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich kann schon durchaus einiges, nur mit Netzwerk bin ich noch nicht vertraut und da wollte ich erstmal klein anfangen. Wink Das SimpleUDP sieht doch schon ganz nett aus, da spart man sich einiges an Arbeit. Smile Vielen Dank auch für den Hinweis mit PHP, da wär ich einfach mal nicht drauf gekommen, da kann man ja endlich mal die PHP und Blitz-Kenntnisse verbinden, vielen Dank. Smile

Milgo

BeitragDo, Aug 27, 2009 12:47
Antworten mit Zitat
Benutzer-Profile anzeigen
So, habe nun eine weitere Frage zu dem Thema.

Ich würde gerne auf meinen Webspace-Server zugreifen, funktioniert leider nicht. Ich habe mir ein Stück Code aus dem Codearchiv kopiert - der funktioniert mit anderen Testseiten und erkennt deren Inhalt, aber bei meinem Server streikt die Verbindung und gibt nur 400 - Bad Request zurück.
Liegt das am Server? An der PHP-Datei die aufgerufen wird? An dem Skript? Sad
Code: [AUSKLAPPEN]
tcpstream = OpenTCPStream("www.milgo.de",80)
WriteLine tcpstream, "GET /index.php HTTP 1.1"
WriteLine tcpstream, "Host: milgo.de"
WriteLine tcpstream,"User-Agent: BB"
WriteLine tcpstream,"Accept: */*"

WriteLine tcpstream, ""
Repeat
   httpline$ = ReadLine(tcpstream)
   Print httpline$
Until Eof(tcpstream)
WaitKey()

Holzchopf

Meisterpacker

BeitragDo, Aug 27, 2009 12:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Versuchs mal so:
BlitzBasic: [AUSKLAPPEN]
tcpstream = OpenTCPStream("www.milgo.de",80) 
WriteLine tcpstream, "GET /index.php HTTP/1.1"
WriteLine tcpstream, "Host: milgo.de"
WriteLine tcpstream, "User-Agent: BB"
WriteLine tcpstream, "Accept: */*"

WriteLine tcpstream, ""
Repeat
httpline$ = ReadLine(tcpstream)
Print httpline$
Until Eof(tcpstream)
WaitKey()


Das Protokoll wird mit "HTTP/1.1" bezeichnet, nicht mit "HTTP 1.1"

mfG
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Milgo

BeitragDo, Aug 27, 2009 13:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke. Smile

Milgo

BeitragFr, Aug 28, 2009 23:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm - eins verstehe ich nicht: Für UDP ist jeder Mitspieler gezwungen einen entsprechenden Port freizuschalten, wenn man hinter einem Router sitzt. Bei TCP muss der Host den entsprechenden Port freischalten. Warum kommen denn so viele (kommerzielle) Spiele damit klar, dass keine Ports freigeschaltet werden? Kann ich das auch irgendwie machen?

Gibts eigentlich auch ne vernünftige Lib wie SimpleUDP für TCP?

Holzchopf

Meisterpacker

BeitragFr, Aug 28, 2009 23:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du nur einen Stream für Lesen und Schreiben benutzt, klappt das auch in UDP.
Dass es nicht klappt, wenn du die Streams separierst, liegt daran, dass dein Router ja nicht weiss, was die Daten nun sollen, die da auf den Lese-Port geschickt werden, weil von diesem Port von innen noch nichts nach draussen ging Wink drum nimmt man nur einen Stream (= einen Port) für Senden und Empfangen, damit nur der Host die Router-Umstände hat...
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

ToeB

BeitragSa, Aug 29, 2009 0:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Das kann man so machen, geht aber bei vielen spielern wieder auf die Geschwindigkeit, da man immer abwarten muss bis die letzte datei zu ende versendet wurde oder eine nachricht empfangen wurde. Deshalb benutze ich dieses system :

Der Server hat einen Generellen Stream auf Port 8000. Wenn ein Client hinzukommt, erstellt der Client zwei Streams(senden/empfangen) und der Server erstellt eine verbindung zum Client (senden, empfangen macht der Port 8000). Das ist die (glaub ich) schnellste methode mit UDP nachrichten zu versenden....

Aber du must dich entscheiden... Wenn du ein benutzerfreundliches Spiel machen willst, dann nimm die o´ben genánnte methode oder nim eine DLL, z.B. enet oder wie das heißt, oder du willst eine schnelle (Fast) zufallässige verbindung, dann nehm meine Methode...

Und es gibt bestimmt Libs zum thema TCP, aber eine allgemeine wie SimpleUDP wirds net geben weil TCP für so viele unterschiedliche bereíche da ist...

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!

Milgo

BeitragSa, Aug 29, 2009 10:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Und warum muss man für kommerzielle Spiele keine Ports freischalten? Die arbeiten doch auch mit TCP oder UDP. Ich habe noch nie Ports freigeschaltet und habe dennoch mit vielen Spielen über das Internet spielen können - auch als Host.

Tankbuster

BeitragSa, Aug 29, 2009 11:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Client schickt dem Server (der Port ist beim Server immer offen) die Nachrichten. Die Firewall des Clients erwartet jetzt eine Nachricht vom Server, und wenn der Server dem Client dann was sendet kommt es an, ohne am Router die Ports freigeben zu müssen.
Twitter
Download Jewel Snake!
Windows|Android

ToeB

BeitragSa, Aug 29, 2009 11:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Auch ist es ja so bei den Kommerziellen spielen,das der Host die Ports freigeschaltet haben muss.

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!

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group