Da immer wieder die Frage auftaucht "Wie funktioniert die 39dll und wie benutze ich sie?" versuche ich meine ganzen Posts in dieses Tutorial zu bringen. Dabei werde ich kein Example schreiben!
Zuerst laden wir uns die aktuelle Version der 39dll herunter:
gmc.yoyogames.com/index.php?showtopic=90437
Was ist die 39dll?
Die 39dll ist eine DLL die Funktionen unteranderem dazu gibt Daten über das Internet (TCP und UDP) zu versenden, als auch Datein zu lesen. Das Datein lesen wird hier nicht behandelt, ist aber eigentlich genau das selbe wie beim Internet.
Die 39dll benutzt einen Buffer. Ein Buffer ist ein Zwischenspeicher indem man Daten lesen oder schreiben kann (wie eine Datei, nur eben im Arbeitsspeicher). Die Daten werden aber nicht irgendwie dort rein geschrieben sondern es gibt dazu Datentypen. Im Game Maker gibt es, wie du weissts, zwei Datentypen: reals und strings. Bei der 39dll gibt es aber noch viel mehr, wir teilen diese in Texte, Ganze Zahlen und Gleitkommazahlen auf.
Text (Hello World): string
Ganze Zahlen (4, -4): int, short
Gleitkommazahlen (3.14, -3.14): float, double
Der Unterschied in diesen ganzen Datentypen liegt darin das diese
Die Grundlagen sind eigentlich fast da! Wie am Anfang erwähnt kennt die 39dll zwei Protokolle: TCP und UDP. TCP hat Verbindungen, UDP nicht. Dazu gibt es noch ein paar mehr Unterschiede, die ihr aber selbst rausfinden könnt.
Für den Anfang könnt ihr einfach TCP benutzen.
Verbindungen über TCP (siehe auch: gm-d.de/wbb/index.php/Thread/7…indung-und-kommunikation/)
Es gibt auch verschiedene Netzwerk Arten (Peer-to-Peer oder Client-Server). Bei Peer-to-Peer ist jeder Spieler mit jeden anderen Spieler verbunden:
Bei dem Client-Server Modell ist jeder Spieler mit einem Server verbunden:
Und auch hier wieder benutzen wir das Client-Server Model (Beispiele: Counter-Strike, Battlefield, Minecraft...).
Der Client ist der Spieler. Wenn der Spieler etwas in den Chat schreibt zum Beispiel, wird das zum Server gesendet und der verarbeitet die Nachricht weiter (Beleidungsfilter, Befehle usw.) und versendet diese Nachricht weiter an andere Spieler.
Der Verbindungsaufbau ist relativ einfach:
Hier will ich nicht weiter ins Detail gehen ein Tutorial gibt es schon dazu.
Der Buffer
Es gibt immer einen Buffer (man kann aber auch mehr benutzen) indem man schreiben und lesen kann.
Dafür gibt es die write und die read Funktionen und nun kommen die Datentypen ins Spiel. Nehmen wir an wir wollen "Hello, World!" und eine Zahl versenden:
Nun stehen in unserem Buffer der Text und eine Zahl. Jetzt können wir das ganze versenden.
Hier kommt wieder unsere ID die wir von tcpconnect zurück bekommen haben ins Spiel.
Wir sollten danach noch den Buffer leeren damit die Daten nicht wieder versendet werden:
Unsere Nachricht befindet sich nun auf den Weg über das Internet.
In vielen Examplen wird immer ein Byte am Anfang versendet, der hier fehlt. Der Byte soll den Nachrichten Typ angeben, was für eine Nachricht das nun ist. Da wir nur eine Nachricht haben brauchen wir das hier nicht. Die read-Funktionen geben keine Fehlermeldungen zurück wenn man versucht eigentlich falsche Daten zu lesen (das kann dazu führen das völlig falsche Daten gelesen werden), daher ist die Reihenfolge wichtig. Schreiben wir erst den string, müssen wir auch den string am Anfang wieder auslesen.
Unsere Nachricht sollte heil angekommen sein und wir haben unsere erste Dinge über das Internet versendet.
Ich habe das ganze ohne Plannung geschrieben, d.h. es kann Fehler geben und die Codes sind alles nur Beispielcodes. Für Beispiele gibt es zwei Tutorials dazu:
gm-d.de/wbb/index.php/Thread/7…indung-und-kommunikation/
http://www.gm-d.de/wbb/index.php/Thread/12299/39dll-ein-simples-spiel/
Die 39dll ist aber keines Wegs auf Spiele beschränkt, hier ist noch eine Tutorial das zeigt wie man IRC in den Grundlagen benutzt:
http://www.gm-d.de/wbb/index.php/Thread/15876/39dll-irc-verbindung-und-joinen/
Wer Fragen oder Fehler findet, bitte melden!
Zuerst laden wir uns die aktuelle Version der 39dll herunter:
gmc.yoyogames.com/index.php?showtopic=90437
Was ist die 39dll?
Die 39dll ist eine DLL die Funktionen unteranderem dazu gibt Daten über das Internet (TCP und UDP) zu versenden, als auch Datein zu lesen. Das Datein lesen wird hier nicht behandelt, ist aber eigentlich genau das selbe wie beim Internet.
Die 39dll benutzt einen Buffer. Ein Buffer ist ein Zwischenspeicher indem man Daten lesen oder schreiben kann (wie eine Datei, nur eben im Arbeitsspeicher). Die Daten werden aber nicht irgendwie dort rein geschrieben sondern es gibt dazu Datentypen. Im Game Maker gibt es, wie du weissts, zwei Datentypen: reals und strings. Bei der 39dll gibt es aber noch viel mehr, wir teilen diese in Texte, Ganze Zahlen und Gleitkommazahlen auf.
Text (Hello World): string
Ganze Zahlen (4, -4): int, short
Gleitkommazahlen (3.14, -3.14): float, double
Der Unterschied in diesen ganzen Datentypen liegt darin das diese
- für andere Zwecke sind (Texte, Ganze Zahlen...)
- unterschiedliche Größen haben (int = 32 Bits, short = 16 Bits, double = 64 Bits)
Die Grundlagen sind eigentlich fast da! Wie am Anfang erwähnt kennt die 39dll zwei Protokolle: TCP und UDP. TCP hat Verbindungen, UDP nicht. Dazu gibt es noch ein paar mehr Unterschiede, die ihr aber selbst rausfinden könnt.
Für den Anfang könnt ihr einfach TCP benutzen.
Verbindungen über TCP (siehe auch: gm-d.de/wbb/index.php/Thread/7…indung-und-kommunikation/)
Es gibt auch verschiedene Netzwerk Arten (Peer-to-Peer oder Client-Server). Bei Peer-to-Peer ist jeder Spieler mit jeden anderen Spieler verbunden:

Bei dem Client-Server Modell ist jeder Spieler mit einem Server verbunden:

Und auch hier wieder benutzen wir das Client-Server Model (Beispiele: Counter-Strike, Battlefield, Minecraft...).
Der Client ist der Spieler. Wenn der Spieler etwas in den Chat schreibt zum Beispiel, wird das zum Server gesendet und der verarbeitet die Nachricht weiter (Beleidungsfilter, Befehle usw.) und versendet diese Nachricht weiter an andere Spieler.
Der Verbindungsaufbau ist relativ einfach:
Hier will ich nicht weiter ins Detail gehen ein Tutorial gibt es schon dazu.
Der Buffer
Es gibt immer einen Buffer (man kann aber auch mehr benutzen) indem man schreiben und lesen kann.
Dafür gibt es die write und die read Funktionen und nun kommen die Datentypen ins Spiel. Nehmen wir an wir wollen "Hello, World!" und eine Zahl versenden:
Nun stehen in unserem Buffer der Text und eine Zahl. Jetzt können wir das ganze versenden.
Hier kommt wieder unsere ID die wir von tcpconnect zurück bekommen haben ins Spiel.
Wir sollten danach noch den Buffer leeren damit die Daten nicht wieder versendet werden:
Unsere Nachricht befindet sich nun auf den Weg über das Internet.
GML-Quellcode
- var ret;
- ret = receivemessage(clientsocket); //<- ID von tcpaccept
- // ret ist nun entweder die Größe der gelesen Bytes, eine negative Zahl wenn keine Daten verfügbar sind oder 0 wenn der Client die Verbindung geschlossen hat
- if (ret>0) //wir betrachten nur den Fall das wir Daten gelesen haben
- {
- show_message(readstring()); //gibt "Hello, World!" aus
- show_message(string(readint())); //gibt 4 aus
- }
In vielen Examplen wird immer ein Byte am Anfang versendet, der hier fehlt. Der Byte soll den Nachrichten Typ angeben, was für eine Nachricht das nun ist. Da wir nur eine Nachricht haben brauchen wir das hier nicht. Die read-Funktionen geben keine Fehlermeldungen zurück wenn man versucht eigentlich falsche Daten zu lesen (das kann dazu führen das völlig falsche Daten gelesen werden), daher ist die Reihenfolge wichtig. Schreiben wir erst den string, müssen wir auch den string am Anfang wieder auslesen.
Unsere Nachricht sollte heil angekommen sein und wir haben unsere erste Dinge über das Internet versendet.
Ich habe das ganze ohne Plannung geschrieben, d.h. es kann Fehler geben und die Codes sind alles nur Beispielcodes. Für Beispiele gibt es zwei Tutorials dazu:
gm-d.de/wbb/index.php/Thread/7…indung-und-kommunikation/
http://www.gm-d.de/wbb/index.php/Thread/12299/39dll-ein-simples-spiel/
Die 39dll ist aber keines Wegs auf Spiele beschränkt, hier ist noch eine Tutorial das zeigt wie man IRC in den Grundlagen benutzt:
http://www.gm-d.de/wbb/index.php/Thread/15876/39dll-irc-verbindung-und-joinen/
Wer Fragen oder Fehler findet, bitte melden!
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von henrik1235 ()