39Dll: string übertragung findet nicht statt

  • GM 8
  • 39Dll: string übertragung findet nicht statt

    Hallo!
    Ich kämpfe gerade damit, dass mir die 39Dll meinen String nicht übertragen will.
    Zuerst versende ich per writebyte() die Zahl 16, und dann einen String mit einer Länge von 300.000 Zeichen.
    Beim Empfangen lese ich die 16 aus, und danach den string (readstring) jedoch ist dieser leer (string_length(string) = 0).
    Woran kann das liegen?
    mfg Partik
  • Also entweder stimmt was mit dem Coder und dem VErbindungsaufbau nciht so ganz.
    Oder.. die 39Dll ist nicht für so gigantische Strings gedacht...
    Probier mal einen viel kürzeren String zu senden und schau ob dies klappt.

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)

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

  • Anscheinend hat er ein Problem mit dem Inhalt des Strings. kürze ich den String auf 30 Zeichen runter, empfängt er immernoch nichts. Schreibe ich stattdessen ein paar zufällige Buchstaben, empfängt er alles super. In dem String sind mit chr() umgewandelte zahlen von 0-2. Was läuft da falsch?Selbst einen String mit 30 Zeichen mag er mir nicht versenden/empfangen. Was meinst du mit Coder?
  • Sicher, dass du vor dem Schreiben deiner Pakete den Buffer leerst?
    Wenn du das nämlich nicht tust, werden die letzten Packets, oder Teile davon, mit versendet.
    Dann kommt bei Strings nur Kauderwelsch raus^^

    - Tobi97
    8|

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

  • Tobi97 schrieb:

    Sicher, dass du vor dem Senden deiner Pakete den Buffer leerst?
    Wenn du das nämlich nicht tust, werden die letzten Packets, oder Teile davon, mit versendet.
    Dann kommt bei Strings nur Kauderwelsch raus^^

    - Tobi97
    Ja -.- . Wie gesagt, es kommt NICHTS an. Ein leerer String.

    >>Anscheinend hat er ein Problem mit dem Inhalt des Strings. kürze ich den String auf 30 Zeichen runter, empfängt er immernoch nichts. Schreibe ich stattdessen ein paar zufällige Buchstaben, empfängt er alles super. In dem String sind mit chr() umgewandelte zahlen von 0-2. Was läuft da falsch?
  • Versuch den String in Chunks aufzuteilen:

    GML-Quellcode

    1. // send_string(string, buffer_size, target);
    2. var string_position, string_size;
    3. string_position = 0;
    4. string_size = string_length(argument0);
    5. // send header
    6. clearbuffer();
    7. writeshort(string_size);
    8. sendmessage(argument2);
    9. // send data
    10. while (string_position < string_size) {
    11. clearbuffer();
    12. if (string_size - string_position < argument1) {
    13. writestring(string_copy(argument0, string_position, string_size - string_position);
    14. string_position = string_size;
    15. } else {
    16. writestring(string_copy(argument0, string_position, argument1);
    17. string_position += argument1;
    18. }
    19. sendmessage(argument2);
    20. }
    Alles anzeigen


    Das Skript für das Empfangen sollte ebenso einfach zu ableiten sein.

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von cafaxo ()

  • Wie ich eben schon 2mal geschrieben habe, scheint es am Inhalt zu liegen. Der String besteht aus per chr() umgewandelten Zahlen von 0-2. Damit hat er anscheinend probleme. Wenn ich nämlich im gleichen Code den String durch "slkdjfhslkdfhj" ersetze, funktioniert es. Kann das sein? Und kann ich da irgendwas gegen tun?
  • Wandelst du die Zahlen mit chr(zahl) um?
    Wenn ja, liegt das Problem auf der Hand.
    Das chr(0) Zeichen wird von der 39Dll als NULL-Zeichen angesehen, wonach der String als beendet gilt.
    Eine mögliche Lösung wäre es, die Zahlen vorher um 1 zu erhöhen.

    - Tobi97
    8|
  • Wandelst du die Zahlen mit chr(zahl) um?
    Ja tue ich. Bsp: chr(1)
    Eine mögliche Lösung wäre es, die Zahlen vorher um 1 zu erhöhen.
    dann werde ich dass wohl oder übel so handhaben müssen.
    Vielen dank für den Tipp, ich werde das morgen mal ausprobieren, wenn es klappt marke ich deine Antwort!
    lg Partik
  • Benutzer online 1

    1 Besucher