Socket: Nachrichten Übertragen



  • Hi,

    ich übertrage über eine Socket Verbindung in beide Richtungen Nachrichten.
    Um die Nachrichten zu trennen habe ich mir ein "Trennzeichen" ausgesucht '\'.
    Jetzt hab ich das Problem das es das Zeichen '\' nicht in der Nachricht geben kann. Da ich über das System aber auch Dateien übertrage kann so gut wie jedes Zeichen vorkommen.
    => Jetzt gehe ich jedes Mal durch den String beim absenden durch und ersetze '\' durch '\n' => aus '\' in der Nachricht wird '\n\n'.
    Und beim empfangen mach ich das ganze anders herum...

    Das ganze funktioniert so weit ganz gut.
    Ich habe nur das Problem, das ich jedes Mal durch den ganzen String durchmuss und alles umändern und auf der anderen Seite noch mal... Was die Datenübertragung ganz schön verlangsamt (hab ich so das Gefühl)

    Mein Frage ist jetzt folgendes:
    Gibt es ein Zeichen welches nicht in einer Datei vorkommen kann? Was ist mit '\0'? Kann ich das über den Socket senden? Oder bin ich mit diesen Ansatz komplett auf den falschen Weg?



  • hmm, weiß nicht, ich habe auch mal mit Sockets gearbeitet, ich habe dabei zu Beginn einmal | als Treenzeichen verwendet, allerdings fand ich dann eine andere Lösung sinnvoller, die is auch von der Fehleranfälligkeit geringer.
    Ich habe zunächst zwei Byte (char-Array: Länge 2), in welchem die Länge des Strings steht, also einfach mit strlen(<str>); ermittelt. Diese werden als erste übertragen. Da weiß der Empfänger dann, wie viele Zeichen er genau vom Socket lesen muss. Anschließend schickt der Sender genau die n Zeichen und der Empfänger erwartet genau n Zeichen. Damit wird gewährleistet, dass beide auch immer alle Zeichen senden/empfangen. Man kann danach auf gleiche Weise noch so was, wie ACKs senden oder so, um zu gewährleisten, dass alles an kam, was gesendet wurde. Ach ja: Bevor irgendwer schreit, ich habe wirklich ein char-Array mit den Zahlen beschrieben und diese auch wirklich als char, wodurch ein Teil des Wertebereichs verloren geht, allerdings erhält man beispielsweise beim Sniffen dann auch schöne Angaben, wie viel Text etc geschickt wurde.



  • Ok, dann werde ich es mal so probieren... Danke 👍



  • Noch ne kurze Frage...

    "Man kann danach auf gleiche Weise noch so was, wie ACKs senden oder so, um zu gewährleisten, dass alles an kam, was gesendet wurde"

    Das wird doch schon durch das TCP/IP Protokoll gewährleisten, oder nicht?



  • ja



  • Bloss bekommt bei TCP/IP das Programm das ACK nicht mit.
    Wenn man also selbst ein ACK bekommen muss (damit man z.B. übertragene Daten lokal löschen kann) muss man selbst eines schicken.
    Geht nicht anders.



  • ok, danke!


Anmelden zum Antworten