TCP "NUL" Senden

  • Habe das Problem das ich einen String senden muss , welcher nach jedem Zeichen das "Nul" enthält

    Der String ist :
    VERSiON0

    Zwischen jedem dieser Zeichen soll das Null stehen , da der Server sonst nicht antwortet.
    Wie bekomme ich es aber dazwischen?

    Der Hexstring wäre 0x560045005200530069004f004e003000
    Und er schneidet irgendwie immer die 00 weg wenn ich zb _hextoString nutze.
    Oder kann ich den Hexstring direkt so verschicken und die 00 werden mitgesendet

    Habt ihr Ideen?

    Einmal editiert, zuletzt von Aldi (24. August 2012 um 16:00)

  • Exakt da ist das Problem :P
    Lasse ich Chr("NUL") in eine TxtFile schreiben klappt es. Lasse ich jedoch NUL's zwischen jedes Zeichen setzen so tauchen diese einfach nicht mehr auf ?(

    Null ist vorhanden

    [autoit]

    FileWrite($tempfile,"V" & Chr(0))

    [/autoit]

    Beide NULL wurden automatisch entfernt sobald es mehrere Zeichen sind

    [autoit]

    FileWrite($tempfile,"V" & Chr(0) & "E" & Chr(0))

    [/autoit]
  • Durchaus möglich :/
    Nur muss ich diese Nulls zwischen jedes Zeichen gesetzt bekommen :P

    Niemand ideen?

  • Und wenn du es so machst:

    TCPSend("$Socket, Binary(0x560045005200530069004f004e003000))

    Gruss Shadowigor

    Es sollte aber eigentlich eher TCPSend($Socket, Binary("0x560045005200530069004f004e003000")) heißen, da man keine größere Zahl als 0xFFFFFFFF in AutoIt verwenden darf, sonst kommts zu nem parsing Problem.

  • Ok, das meinte ich ja eigentlich auch... :rolleyes:

    Sprenger120: Das wird wohl so nicht gehen, denn er will ja dass die Daten binär ankommen. So schickst du einfach nur einen normal String. Und so wie ich das verstanden habe hat er keinen Einfluss auf die andere Seite (sonst müsste er es ja nicht so Umständlich machen...).

  • Ja das Packet muss eben abwechselnd ein Zeichen & Null enthalten :P

    Mit dem langen Hex gehts wieoben jemand geschrieben hat nicht wegen des parsing Fehlers


    Keine Ideen ? ^^

  • Versuchs doch mal so:
    http://www.autoit.de/dokumentation_…ringReplace.htm

    Beispiel:

    [autoit]

    TCPSend($Socket, StringReplace ("DAS IST DER TEXT", "", "0"))

    [/autoit]

    EDIT:
    Oder du sendest erstmal ein anderes Zeichen zwischen den Zeichen des Textes, z.B. "-"
    und wendest nach dem senden erst StringReplace an.

    [autoit]


    $recv = TCPRecv ($Socket, 500)
    $repl = StringReplace ($recv, "-", "0")
    ;==> Ab hier wird er Rückgabewert von $repl verwendet...

    [/autoit]
  • Versuchs doch mal so:
    http://www.autoit.de/dokumentation_…ringReplace.htm

    Beispiel:

    [autoit]

    TCPSend($Socket, StringReplace ("DAS IST DER TEXT", "", "0"))

    [/autoit]


    1) Kann man überhaupt "" ersetzen?
    2) Der String soll ja dann NUL und nicht 0 enthalten, und dann sind wir wieder bei dem Anfangsproblem.

  • (Hab nochmal Editiert)

    Achso, es soll das Wort "NUL" zwischen den Zeichen gesendet werden, nich die Zahl "0"?

  • Funktioniert leider nicht :P

    Beim vollen String werden immer alle Null's weggeschnitten :/

    Edit:
    Es ist das gesucht was bei Chr(0) kommt. Also der Null-Wert


  • Geht das nicht?

    Ok, is blöd wenn man gleichzeitig antwortet xD

  • Nein, da du "-" durch "0" ersetzt und nicht NUL durch "-", wobei wir da wahrscheinlich immernoch bei dem selben Problem wären, und zwar, dass in $repl alles ab dem ersten NUL fehlt.

    Edit: siehe meinen Post weiter oben...

  • Wenn ich das durch 0 ersetzen lasse kommt ein anderer Hex Wert raus als es sein müsste :P

    Eine 0 -> 30
    Ich brauche -> 00

  • Schonmal so versucht?

    Spoiler anzeigen
    [autoit]

    $sTest = "Hallo"

    [/autoit] [autoit][/autoit] [autoit]

    TCPSend($iSocket, _InsertNULL($sTest))

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _InsertNULL($_sText)
    Local $_sRet
    Local $_aSS = StringSplit($_sText, "")
    For $i = 1 To $_aSS[0]
    $_sRet &= $_aSS[$i] & Chr(0)
    Next
    Return Binary($_sRet)
    EndFunc

    [/autoit]