Frage

Ich baue ein einfaches Client-Server-Chat-System.

Die Clients senden Daten an den Server und der Server sendet die Daten an alle anderen Clients. Ich bin die TcpListener und Netzwerk-Stream-Klassen unter Verwendung der Daten zwischen dem Client und dem Server zu senden.

Die Felder, die ich brauche, sind zu senden, zum Beispiel:. Name, Text, Zeitstempel usw. Ich trennt sich mit dem ASCII-Zeichen 29

Ich bin auch mit ASCII-Zeichen 30 das Ende der gestreamten Daten zu markieren.

Die Daten werden verschlüsselt mit UTF8 ..

Ist das ein guter Ansatz? Werde ich in Probleme laufen? Gibt es bessere Methoden?

UPDATE:

Wahrscheinlich war meine Frage falsch verstanden, so dass ich es besser erklären .. Angenommen, eine Liste von Daten zu haben, vom Client zum Server zu senden, und nehmen sich an alle, die Daten senden in nur einen Strom, wie senden Sie diese Daten?

  • Mit einem Markup
  • Mit einem Zeichen als Trennzeichen
  • Mit einer festen Länge für alle Felder
War es hilfreich?

Lösung

Anstatt Text abgrenzt, finde ich es viel einfache Länge-Präfix einzelnen Nachrichten - also eher als das Schreiben

message [TERMINATOR]

Sie würden schreiben

[LENGTH] message

(Bitte senden Sie die Länge in binär, und nicht als Text - entweder eine Zahl mit fester Länge, zB 4 Byte oder eine variabler Länge Nummer, wenn Sie bereit ist aus Gründen der Einfachheit zu opfern, von der übertragenen Datengröße reduziert sehr leicht ).

Dann ist es einfach, genau die richtige Menge an Daten aus dem Stream zu lesen, ohne sich Gedanken über in die nächste Nachricht überschieß. Der einzige Nachteil ist, dass Sie die Länge der Nachricht wissen müssen, bevor Sie es mit dem Senden, aber ich glaube nicht, dass es ein Problem für Sie in diesem Fall sein sollte.

Durch die Art und Weise, UTF-8 ist eine Codierung , nicht ein Verschlüsselungsalgorithmus.

Andere Tipps

Ich THINKG, dass eine andere Option serialisiert sein könnte / deserialisieren Ihre Objekte und Senden / Empfangen sie mit . NET Remoting . Sie können auch Ihre Objekte verschlüsseln, wenn das Senden und Entschlüsselung beim Empfang.

Der Code Project Ive fand ein kleines Beispiel mit Quelle Code.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top