39DLL Problem beim daten empfangen!!!

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

  • 39DLL Problem beim daten empfangen!!!

    Hallo

    Ich versuche gerade ein online-game mit gamemaker zu programmieren. Aus Performancegründen möchte ich den Serverscript aber in einer anderen Sprache schreiben(Java/C++).
    Ich habe einen kleinen Server in JAVA geschrieben, der dem Spiel eine ID übergeben soll:

    Hier mal der Code wenn es jemand interessiert:

    Quellcode

    1. while(true){
    2. Socket c= server.accept();
    3. System.out.println("InComing"); //Anzeige bei neuer Verbindung
    4. PrintStream outP=new PrintStream (c.getOutputStream());
    5. if(clients.menge()!=maxplayer){
    6. int id=clients.getE(); // Leere ID finden
    7. outP.print(id); //<------ Daten an Client senden
    8. System.out.println("#"+id); // ID Ausgeben
    9. clients.add(c, id);
    10. }else{
    11. outP.print(m_exit);
    12. }
    13. }
    Alles anzeigen


    Der Server funktioniert hab zum testen auch mal einen client in JAVA geschrieben und die daten werden auch gesendet und vom JAVA-Client empfangen.


    So mein Problem:
    Die Daten werden nicht von GM empfangen.

    GML-Quellcode

    1. dllinit(0, true, false);
    2. socket = tcpconnect("127.0.0.1", 12000, 1);
    3. if(!socket) //if unable to connect
    4. {
    5. show_message("Unable to connect to server"); //display error and quit game
    6. exit;
    7. }
    8. setnagle(socket, false);
    9. setformat(socket,2);
    10. show_message(readint());
    11. dllfree();
    Alles anzeigen


    Es erscheint eine Message ohne Inhalt.
    Ich habe die Daten auch mal in einer endlosschleife abrufen lassen und dann im Debug-Modus anzeigen lassen, aber auch dort wird nix angezeigt.

    Ich hoffe ihr könnt mir helfen.


    MfG
    SimGel
  • Falls die Funktion readint() eine Zahl zurück gibt, musst du die in einen String umwandeln bevor du den Inhalt anzeigen kannst. Die 11te Zeile müsste dann so lauten:

    GML-Quellcode

    1. show_message(string(readint()));

    (Ich gehe davon aus, dass der Rest des Scripts funktioniert...)

    mfg Dragoon
    int (*x(*x(int))[5])(int*);
    Confused? Yes, it's C!
  • danke jungs ihr seit eine super Hilfe!!

    ich habe den Code im spiel geändert:

    GML-Quellcode

    1. dllinit(0, true, false);
    2. socket = tcpconnect("127.0.0.1", 12000, 1);
    3. if(!socket) //if unable to connect
    4. {
    5. show_message("Unable to connect to server"); //display error and quit game
    6. exit;
    7. }
    8. setnagle(socket, false);
    9. setformat(socket,2);
    10. while(true){
    11. size = receivemessage(socket);
    12. show_debug_message(string(size)+" "+string(readint()));
    13. sleep(350);
    14. }
    15. dllfree();
    Alles anzeigen


    die Ausgabe sieht folgendermaßen aus:

    Quellcode

    1. -10035 2089948566
    2. 0 2089944747
    3. 0 2089944747
    4. 0 2089944747
    5. 0 2089944747


    Die Daten werden anscheinend empfangen. Aber die Werte stimmen noch nicht ganz.
    Hat jemand eine Idee, wie man da gescheite daten heraudbekommt?? Die zweite zahl müsste eine 1 sein und nicht "2089948566"


    SimGel

    [zusammengeschoben durch CAS]

    Hat niemand eine idee was ich noch ändern müsste, damit da ein "gescheite" Zahl raus kommt. Normalerweise müsst die erste Zahl auch positiv sein oder??

    SimGel

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von simgel ()

  • Ich denke mal das sind nicht die Werte, die du willst, da die Grössen aller Werte kleinergleich 0 sind. Ich denke mal, dass dein Code zu wenig lange auf die Werte wartet, oder diese überspringt (wegen dem sleep). Versuch mal etwas in dieser Art:

    GML-Quellcode

    1. dllinit(0, true, false);
    2. socket = tcpconnect("127.0.0.1", 12000, 1);
    3. if(!socket) //if unable to connect
    4. {
    5. show_message("Unable to connect to server"); //display error and quit game
    6. exit;
    7. }
    8. setnagle(socket, false);
    9. setformat(socket,2);
    10. while(true){
    11. size = receivemessage(socket);
    12. if(size>0){
    13. show_debug_message(string(size)+" "+string(readint()));
    14. break;
    15. }
    16. }
    17. dllfree();
    Alles anzeigen
    int (*x(*x(int))[5])(int*);
    Confused? Yes, it's C!
  • ich hab das mal ausprobiert aber er bleibt in der schleife drin. Ich glaube ncht, das er daten nicht empfängt, denn alle eingehenden nachrichten werden ja in eine reihe gelegt und mit receivemessage() holste dir die dann aus der reihe.

    Vlt ist ja das format oder so falsch!?!

    edit:
    ich hab das jetzt so:

    GML-Quellcode

    1. while(true){
    2. size = receivemessage(socket,10);
    3. if(size>0){
    4. show_debug_message(string(readint()));
    5. break;
    6. }
    7. sleep(100);
    8. }


    die zahlen die er empfäng sind immer nur zu hoch aber er zählt die zahl hoch, so wie der server ihm eine höhere id gibt.
    bsp.:10761521
    dann 10761522
    usw

    Selsamerweise kann ich aber nicht minus rechnen also:

    GML-Quellcode

    1. show_debug_message(string(readint()-10761520));
    dann komm da -6233081 heraus ?(

    SimGel

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von simgel ()