TCP Server/Client Stream - Frage (JavaIO + 39DLL)

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • TCP Server/Client Stream - Frage (JavaIO + 39DLL)

      Guten Tag,

      ich arbeite gerade an einem Server für mein Spiel wobei der Server in Java geschrieben wird und der Client in GML - mit der 39dll.

      Mein Problem ist folgendes, wenn der GML (39dll) Client eine Message an den Server schickt, sollte die beispielsweiße so aussehen:

      GML-Quellcode

      1. 15 //byte, messageID
      2. 100 //byte, zusätzliche Info

      Was am Server aber ankommt, sieht so aus:

      GML-Quellcode

      1. 15
      2. 0
      3. 100

      Dieser 0er schleicht sich da permanent hinein, hat da wer Ahnung, was das sein könnte?

      So richtig unverständlich wirds für mich aber erst bei den Messages vom Server zum Client - da sind die Blöcke im Stream um 2 verschoben 8|
      Wenn ich nun das sende:

      GML-Quellcode

      1. 15
      2. 100
      3. 22
      4. 50

      Kommt bei GM das hier raus:

      GML-Quellcode

      1. 22
      2. 50

      Was ja völliger Müll ist, da dies ja heißen würde, dass GM die "100" als size der message nimmt.
      Oder heißt das, ich muss die size der message selbst mitgeben? Ist ja nicht möglich, wenn die size an erster Stelle geschrieben werden muss.

      Hier der Code vom Server (zusammengefasst):
      Spoiler anzeigen

      GML-Quellcode

      1. streamOut = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream()));
      2. streamOut.writeByte(MSG_QUEUE);
      3. streamOut.writeByte(action);
      4. streamOut.writeByte(success);
      5. streamOut.writeByte(500);
      6. streamOut.flush();


      Über Hilfe würde ich mich sehr freuen, ich seh mich da grad nicht mehr raus. :|
      Dieser Beitrag wurde bereits 8.675.628 mal editiert, zuletzt von »levarris07« (Heute, 11:33)
    • Ich kann bezüglich der 39DLL nicht wirklich behilflich sein da ich für die Client-server kommunikation die GM-internen Networking funktionen verwende (verwende auch einen Java-server)

      Hättest du evtl ein Code-snippet des Clients wo du die daten empfängst? Ohne Code kann man in diesem Fall nicht wirklich viel anfangen.
      Das eine Java-code snippet was du gepostet hast scheint auf dem ersten Block völlig in ordnung zu sein.
    • Danke für den Tipp, ich glaub ich steig einfach auf GM:S Net Funktionen um.
      Ich vermute, dass das Problem bei GM selbst liegen könnte, da GML ja keine Datentypen (neben strings und "reals") kennt.

      Hier der Ausschnitt:

      GML-Quellcode

      1. length = receivemessage(socket);
      2. if (length > 0) {
      3. messageID = readbyte();
      4. var1 = readbyte();
      5. var2 = readbyte();
      6. var3 = readbyte();
      7. }
      Dieser Beitrag wurde bereits 8.675.628 mal editiert, zuletzt von »levarris07« (Heute, 11:33)
    • Ich würde da auch empfehlen auf die GM-internen funktionen umzusteigen. (Vor allem hast du da direkten zugriff auf den Buffer.) Evtl hat die 39DLL auch irgendetwas. (Hab die lange nicht mehr verwendet.)

      bzw. etwas offtopic... aber...
      Dieser Beitrag wurde bereits 8.675.628 mal editiert, zuletzt von »levarris07« (Heute, 11:33)

      ... what?