none
Daten über NetworkStream senden RRS feed

  • Frage

  • Hallo.

    Ich sende meine Daten zwischen Client und Server über den NetworkStream.
    Nun bin ich an einen Punkt gelangt, andem ich ganze Klassen, Listen o.ä. senden möchte.

    Vorher habe ich nur strings versand.
    Diese habe ich mit einem vorangestelltem, von mir eindeutig definiertem Namen, trennen können.

    z.B.:
    "singlemsg=Hallo Du."
    "multimsg=Hallo Ihr."

    So konnte ich unterscheiden.
    Nun möchte ich aber (Um mal spezifisch einzugehen) eine List<EigeneKlasse> versenden.

    Wie bewerkstellige ich dies?

    Meine Klasse zum Senden:

    public bool SendMessage(TcpClient tcpClient, string message)
        {
          try
          {
            this.networkStream = tcpClient.GetStream();
    
            ASCIIEncoding encoder = new ASCIIEncoding();
            byte[] buffer = encoder.GetBytes(message);
    
            this.networkStream.Write(buffer, 0, buffer.Length);
            this.networkStream.Flush();
    
            return true;
          }
          catch (Exception) { return false; }
        }
    
    Auf der anderen Seite muss ich die empfangen Daten nun auch wieder rekonstruieren und vor allem identifizieren.

    Jemand einen Link o.ä.?
    Ich habe bis dato nichts gefunden.

    Danke

    Sonntag, 5. Juni 2011 19:12

Antworten

  • Schau dir mal die Klasse XmlSerializer an.

    Damit kannst du ein beliebiges (serialisierbares) Objekt in einen Stream schicken. Das geht auch mit Listen von diesem Objekt.

    Du musst beim Empfangen allerdings prüfen, wo die Daten enden. Das kannst du sicher in dein Protokoll einbauen (z.B. anzahl der XML-Bytes die kommen etc).

    Es gibt diverse andere Serialisierer. XML ist ganz praktisch, weil man das zur Not auch noch lesen kann. 

    Ansonsten wäre sowas eventuell auch was für einen WebService, wo du direkt die Objekte an eine Zielfunktion schicken kannst. Dann brauchst du dir keine gedanken um die Übertragung und dekodierung machen. Das machen dann die WCF Klassen.

    Viel Spass

    Sonntag, 5. Juni 2011 19:52

Alle Antworten

  • Schau dir mal die Klasse XmlSerializer an.

    Damit kannst du ein beliebiges (serialisierbares) Objekt in einen Stream schicken. Das geht auch mit Listen von diesem Objekt.

    Du musst beim Empfangen allerdings prüfen, wo die Daten enden. Das kannst du sicher in dein Protokoll einbauen (z.B. anzahl der XML-Bytes die kommen etc).

    Es gibt diverse andere Serialisierer. XML ist ganz praktisch, weil man das zur Not auch noch lesen kann. 

    Ansonsten wäre sowas eventuell auch was für einen WebService, wo du direkt die Objekte an eine Zielfunktion schicken kannst. Dann brauchst du dir keine gedanken um die Übertragung und dekodierung machen. Das machen dann die WCF Klassen.

    Viel Spass

    Sonntag, 5. Juni 2011 19:52
  • Wunderbar.
    Davon habe habe ich bislang noch garnichts gehört gehabt.

    Vielen Dank für die Info
    Sonntag, 5. Juni 2011 20:36