Zeichensatz an Master Server



  • Hi,
    Ich möchte gerne eine Abfrage des Half-Life Master Servers machen dazu hab ich folgende Doku:
    http://developer.valvesoftware.com/wiki/Master_Server_Query_Protocol
    Nur kapier ich jetzt nichr ganz was ich mit send da hinschicken muss, bis jetzt hab ich: "0xFF\type\d\secure\1" jedoch bekomme ich nur ein paar leerzeichen und eine Null am Schluss herraus?
    Wie muss ich das richtig machen?

    MFG ReduX



  • Steht dort doch ziemlich genau...
    0x31,0xFF,"0.0.0.0:0",0x00,"\type\d\secure\1",0x00



  • Hi,
    Danke für deine Antwort!

    Wie muss ich das denn nun Senden?
    Weil da steht was von Binär und so, leider bin ich da drin noch nicht so fit.
    Also ich weiß was Binär ist aber nicht wie ich es anwende!
    Müsste ich das dann alles auf einmal senden?

    Danke für eure Geduld.
    MFG ReduX



  • Da es sich um UDP handelt, musst du die Nachricht vermutlich als Ganzes verschicken, sonst wird dir der Server das nicht verzeihen.
    Den Buffer kannst du "binär" z.B. so füllen (wenn es sich um C oder eine ähnliche Sprache handelt):

    buffer[0]=0x31;
    buffer[1]=0xFF;
    //und danach die beiden Strings
    


  • Hi,
    Stimmt das so?:

    char masterquery1[256];
    masterquery1[0] = 0x31;
    masterquery1[1] = 0x03;
    strcat(masterquery1,"0.0.0.0:0\0");
    strcat(masterquery1,"\\type\\d\\secure\\1\0");
    

    Das char array schicke ich so an den server und bekomme dann eine unleserliche Zeichnekette zurück, die ich unter debian nicht lesen kann!

    MFG ReduX :xmas1:



  • Nein! strcat erwartet zwei C-Strings (also 0-terminierte Daten!). Wie soll es sonst wissen, wo mit dem anfügen begonnen werden sollte?



  • Hi,
    Ich kann dir nicht ganz folgen.
    Die beiden strings/Zeichenketten werden am Schluss doch mit \0 terminiert.

    MFG ReduX



  • strcat(masterquery1,"0.0.0.0:0\0");
    

    und wo ist masterquery1 0-terminiert? Und du weißt, dass strcat nur bis zur ersten 0-Terminierung kopiert?

    Was du willst ist wohl eher

    memcpy(masterquery1 + 2, "0.0.0.0:0", sizeof("0.0.0.0:0"));
    

    siehe man: memcpy und man: strcat



  • Hmm aber wenn ich nun:

    char masterquery1[256];
    masterquery1[0] = 0x31;
    masterquery1[1] = 0x03;
    memcpy(masterquery1 + 2, "0.0.0.0:0", sizeof("0.0.0.0:0"));
    memcpy(masterquery1 + 11, "\\type\\d\\secure\\1", sizeof("\\type\\d\\secure\\1"));
    

    hinschicke ist die Zeichenkette auch nicht lesbar?!?

    MFG ReduX



  • was heißt überhaupt "nicht lesbar"? Lass dir die empfangenen Daten einmal als Zahlen ausgeben

    ssize_t n = recv(s, buffer, buffer_len, flags);
    if(n < 0)
      fehler();
    else for(size_t i = 0; i < (size_t)n; ++i)
      cout << hex << (unsigned)buffer[i] << ' ';
    


  • Hi,
    Wenn ich das mit Hex ausgebe bekomme ich sowas wie:

    ffffff87
    3e
    4b
    ffffff8d
    59
    ffffffea
    62
    ffffffd9
    ffffffa3
    1e
    ffffffd0
    69
    ffffff87
    3e
    4b
    ffffff8d
    59
    69
    ffffff87
    ffffffd9
    ffffffa3
    1e
    ffffffcf
    69
    ffffff87
    3e
    4b
    ffffff8f
    2a
    69
    ffffffd2
    3e
    4b
    ffffff8f
    43
    69
    ffffff87
    0
    

    Nur wie kann ich das jetzt in ips und ports transverieren? Kenne mich mit Hex zeugs da nicht so aus.

    MFG ReduX



  • Bzw noch:
    Laut doku kommen ja bytes an und beim empfangen wird ja alles in ein char array geschrieben. Dann müsste es das Byte ja automatisch in ASCII umwandeln oder?
    Wenn ich aber was ausgebe aus dem char array ist es wie beschrieben nicht lesbar bzw. es wird ein Fragezeichen angezeigt.

    MFG ReduX



  • Hat den keiner eine Idee?
    Habe schon überall geschaut aber nichts gefunden.

    MFG ReduX :xmas1:


Anmelden zum Antworten