Winsock Übertragungsproblem



  • Shade Of Mine schrieb:

    Beispiel ist eine Funktion, also musst du sie auch aufrufen:

    send( Socket, Beispiel().c_str(), Beispiel().length(), 0 );
    

    wobei das 2 funktionsaufrufe sind, besser waere ein:

    string s=Beispiel();
    send( Socket, s.c_str(), s.length(), 0 );
    

    Danke, du hast Recht, das ist mir wohl beim Schreiben passiert 🙂 Aber zu meiner Problemlösung trägt es leider nicht bei. Also nochmal: Ich möchte gerne über Sockets etwas versenden... Klappt auch! Aber wenn ich nun einen Text habe z.B. "Bla\nBla\t\tBlub" dann würde ich diesen gerne erst in eine anderes Format bringen in dem die Steuerzeichen nicht mehr ausgeführt werden also etwas a la:

    std::string Text = "Bla\nBla\t\tBlub";
    std::string Sende = Verschluessel( Text, "KEYBLABLABLA" ) + "\n";
    send( Socket, Sende.c_str(), Sende.length(), 0 );
    

    Auf der anderen Seite empfange ich das wieder und habe dann wieder in einer Varible "Bla\nBla\t\tBlub" stehen (ohne "\n", das dient nur zur Trennung). Und der Datenfluss wurde durch diese Steuerzeichen nicht gestört, da diese "unschädlich" gemacht wurden. Man sagte mir ich sollte hierfür unsigned char oder so nehmen, aber das scheint mir Schwachsinnig.

    Meine Frage: Wie versende ich das also nun? D
    as Sendeformat soll sein "VERSCHLUESSELTE_NACHRICHT\n"... siehe Beispiel

    Danke im Voraus

    Gruß
    DerArmeRitter



  • Hya !

    DerArmeRitter schrieb:

    ...
    In den meisten Fällen geht alles gut, aber ab und zu kommt es vor das der verschlüsselte String ein \n enthält und damit den Nachrichtenaufbau zerstört.
    ...

    Dann stimmt etwas mit deinem Programm nicht.

    DerArmeRitter schrieb:

    ...
    Und das einzigste Steuerzeichen mein eigenes ist. Und zwar zum Schluss: "DER_VERSCHÜSSELTE_TEXT\n"
    ...

    Das ist kein Steuerzeichen, sondern eine Folge von Bytes.
    Es ist natürlich machbar, jedoch halte ich das für ungeeignet.

    Du könntest dir z.B. ein eigenes Protokoll definieren.
    Oft wird für solche Zwecke als erstes ein Header übertragen, in dem
    der eigentliche Inhalt beschrieben ist( Länge der Daten in Byte, Datentypen, etc.)
    Für deine Verschlüsselte-Daten-Sektionen könntest du dir z.B.
    ein ASCII Steuerzeichen umdefinieren.

    Genaueres zu Headern( 6.5. Son of Data Encapsulation )
    und vieles mehr findest du hier:
    http://beej.us/guide/bgnet/output/print/bgnet_USLetter.pdf

    🙂
    Gruß, p.



  • proggingmania schrieb:

    DerArmeRitter schrieb:

    ...
    Und das einzigste Steuerzeichen mein eigenes ist. Und zwar zum Schluss: "DER_VERSCHÜSSELTE_TEXT\n"
    ...

    Das ist kein Steuerzeichen, sondern eine Folge von Bytes.
    Es ist natürlich machbar, jedoch halte ich das für ungeeignet.

    Es geht um das '\n' und das ist ein Steuerzeichen! Kannst du nochmal etwas genauer sagen wie ich nun weiter vorgehen soll? Ich komme leider nicht weiter 😞

    Danke



  • Inwiefern zerstört das '\n'
    den Nachrichtenaufbau ?



  • Ich habe mir das so gedacht:

    BEFEHL PARAMTER

    Das verschlüssel ich nun und kriege als Beispiel:

    bsdad\nsdajddas

    Und hänge nun noch ein \n als Trennung an und erhalte:

    bsdad\nsdajddas\n

    Nun empfange ich bis zum \n da dies als Trennung gilt

    Und er behandelt beides als einzelne Befehle, weil \n als Trennung da ist



  • Brauchst du ja eigentlich bei der Verschlüsselung nur den Fall '\n' abzufragen und abzufangen. Dafür kannst du ein anderes Zeichen spendieren und statt dessen einfügen. 😉



  • Dann bekomme ich bei dem Zeichen evtl. eine Kollision 😞



  • Kollision ? Mit was denn ?



  • Für deine Verschlüsselte-Daten-Sektionen könntest du dir z.B.
    ein ASCII Steuerzeichen umdefinieren.

    Tschuldigung das ich mich einmische, aber wie geht das? 😕
    danke schonmal



  • Fencer schrieb:

    Tschuldigung das ich mich einmische, aber wie geht das? 😕
    danke schonmal

    Einfach ein Steuerzeichen auswählen, welches das Ende der verschlüsslten Daten markiert.



  • danke


Anmelden zum Antworten