RemoteConsole und C++



  • XMaster schrieb:

    Wobei hier auch zu beachten ist, dass C-Strings automatisch mit \0 enden, so dass du das vielleicht sogar ganz weglassen kannst.

    Ja, das ist ein Argument. Diese send-Funktion sendet nur bis zum ersten \0 und denkt, da sei der String zu Ende. Man muß eine andere send-Funktion finden, die überhaupt ermöglicht, \0 zu senden.



  • volkard schrieb:

    XMaster schrieb:

    Ich würde nicht \00 senden, sondern entweder \0

    \0 == \00 == \000 == \x0 == \x00

    Hm, stimmt. Ich hatte erwartet, dass "\00" == "\0" "0". Aber gut, man lernt nie aus. 🙂



  • Okey also kurz gesagt eigentlich sollte das Ganze nicht auf 0 oder \0 oder ... enden sondern auf 0A. Scheinbar weiß der Server dann, dass die Anfrage zu ende ist. Nur bei Delphi klappt das mit und ohne 0 am Ende (kein Plan warum 😃 ).

    Trotzdem funktionieren alle Varianten nicht in C++, vermutlich weil ich das nicht als String oder sowas senden darf...

    Gibt's andere Möglichkeiten?



  • SilentHunter schrieb:

    Okey also kurz gesagt eigentlich sollte das Ganze nicht auf 0 oder \0 oder ... enden sondern auf 0A. Scheinbar weiß der Server dann, dass die Anfrage zu ende ist. Nur bei Delphi klappt das mit und ohne 0 am Ende (kein Plan warum 😃 ).

    Trotzdem funktionieren alle Varianten nicht in C++, vermutlich weil ich das nicht als String oder sowas senden darf...

    Gibt's andere Möglichkeiten?

    Ja, fast unendlich viele - damit angefangen mit der Lib die du zum senden verwendest...

    Was ich allerdings mal machen würde: gucken, was du wirklich sendest(und das mit dem vergleichen, was dein Delphi-Quelltext gesendet hat). Wenn du noch Quake hast, kannst du auch noch gucken, was das sendet...

    Fast immer nützt es auch was, die Doku der Lib durchzulesen - da steht meist auch drin, was wann gemacht wird und wie man es (de-)aktiviert...

    bb



  • SilentHunter schrieb:

    Okey also kurz gesagt eigentlich sollte das Ganze nicht auf 0 oder \0 oder ... enden sondern auf 0A. Scheinbar weiß der Server dann, dass die Anfrage zu ende ist. Nur bei Delphi klappt das mit und ohne 0 am Ende (kein Plan warum 😃 ).

    Ist a nicht ein Zeilenumbruch?
    Hast Du in Delfi mit einer Art WriteLine rausgesendet?



  • http://www.koders.com/delphi/fidB16269F469AA29AE7C836520F79CAE053C76D761.aspx?s=server

    dort ist die zeile zwar auskommentiert, aber dort steht
    [c]socket.Send(slist[i].ip.ipaddr,slist[i].ip.port,#255+#255+#255+#255+'getstatus'+#10);[/c]

    hmm... seit wann geht denn [c]+[b] nicht mehr? 😣

    bb



  • volkard schrieb:

    Vielleicht wegen der beiden öffnenden [i]

    ne, hatte es sowohl mit [ i] als auch mit [í] versucht und es ging nicht...
    guck:
    [c]asd[/c]

    bb



  • unskilled schrieb:

    SilentHunter schrieb:

    Okey also kurz gesagt eigentlich sollte das Ganze nicht auf 0 oder \0 oder ... enden sondern auf 0A. Scheinbar weiß der Server dann, dass die Anfrage zu ende ist. Nur bei Delphi klappt das mit und ohne 0 am Ende (kein Plan warum 😃 ).

    Trotzdem funktionieren alle Varianten nicht in C++, vermutlich weil ich das nicht als String oder sowas senden darf...

    Gibt's andere Möglichkeiten?

    Ja, fast unendlich viele - damit angefangen mit der Lib die du zum senden verwendest...

    Was ich allerdings mal machen würde: gucken, was du wirklich sendest(und das mit dem vergleichen, was dein Delphi-Quelltext gesendet hat). Wenn du noch Quake hast, kannst du auch noch gucken, was das sendet...

    Fast immer nützt es auch was, die Doku der Lib durchzulesen - da steht meist auch drin, was wann gemacht wird und wie man es (de-)aktiviert...

    bb

    Also um nochmal darauf zurückzukommen, es geht nicht um das Spiel Quake sondern um alle Gameserver angefangen von Call of Duty, die das Quake3 Protokoll benutzen, ich selber habe das nicht. Ich kann euch die Adresse eines Test Gameservers nennen: IP:213.239.211.76 Port:28404 (Call of Duty 4).

    Wie man auf http://int64.org/docs/gamestat-protocols/quake3.html sehen kann, ist 0A ein Punkt.

    Auf der Seite der Lib: http://www.indyproject.org/index.de.aspx kann ich leider (oder irgendwie) nichts über die UDP Komponente finden ...

    Ich habe dafür irgendwo mal überlesen, das ich glaube in Java das Ganze in bytes gesendet werden muss und nicht als String oder sowas.

    Kann einer damit was anfangen?



  • Strings sind in C++ null-terminiert. Wenn beim Abklappern der Zeichen \x00 gefunden wird, ist der String zu Ende. Wahrscheinlich übertragt Send die abschließende Null nicht. Musst also in der Doku nach einer Funktion suchen, die beliebige Daten versenden kann (sowas wie const char*/(unsigned) int in der Signatur wäre ein heißer Tipp).



  • http://www.indyproject.org/Sockets/Docs/index.DE.aspx
    ->
    TIdUDPClient

    SendBuffer sieht z. Bsp. gar nicht mal so schlecht aus...
    aber so weit ich das mitbekommen hab, gibts doch jz gar keine 0 mehr im String!?

    bb



  • SilentHunter schrieb:

    Wie man auf http://int64.org/docs/gamestat-protocols/quake3.html sehen kann, ist 0A ein Punkt.

    Plonk.



  • In welches Forum soll ich den Thread verschieben, um ihn nicht schließen zu müssen?



  • volkard schrieb:

    In welches Forum soll ich den Thread verschieben, um ihn nicht schließen zu müssen?

    "Delphi-C++" klingt doch sehr nach VCL, Indy auch.


Anmelden zum Antworten