2017-09-08 3 views
-2

Ich mache ein einfaches Programm, das UDP-Pakete von einem anderen Programm empfangen und ich möchte dieses Paket in eine Klasse umwandeln.UDP-Paket zu Klasse

Ich habe eine Klasse:

public class Packet 
{ 
    public string MyFirstProperty {get; set;} 
    public string MySecondProperty {get; set;} 
    public string MyThirdProperty {get; set;} 
    public OtherObject[] ObjectArray {get; set} 
} 

Das Paket, das ich empfangen sind Bytes Array. Wie kann ich das Paket in eine Klasse umwandeln? Ich habe vom Marshalling gehört, aber ich bin nicht erfahren genug, um es vollständig zu verstehen. Was soll ich tun.

Vielen Dank.

+0

Sie müssen Code schreiben, der diese Binärdaten liest und dann die Daten in .NET-Zeichenfolgen usw. konvertiert. Es gibt viele Optionen, wie Sie schließlich diesen Code in etwas idiomatisch einwickeln können. Aber für Ihren ersten Versuch - schreiben Sie einfach den Code ('' Packet Parse (MemoryStream Bytes) '') – BitTickler

Antwort

0

Sie müssen Serialisierung und De-Serialisierung verwenden, um Klassenobjekte von und in Byte-Array zurück zu konvertieren.

Hier ist ein Beispielbeispiel.

public class MyClass { 

    public int Id { get; set; } 
    public string Name { get; set; } 

    public byte[] Serialize() { 
     using (MemoryStream m = new MemoryStream()) { 
     using (BinaryWriter writer = new BinaryWriter(m)) { 
      writer.Write(Id); 
      writer.Write(Name); 
     } 
     return m.ToArray(); 
     } 
    } 

    public static MyClass Desserialize(byte[] data) { 
     MyClass result = new MyClass(); 
     using (MemoryStream m = new MemoryStream(data)) { 
     using (BinaryReader reader = new BinaryReader(m)) { 
      result.Id = reader.ReadInt32(); 
      result.Name = reader.ReadString(); 
     } 
     } 
     return result; 
    } 

} 

Link to MSDN for more on serialization

1

Um ein Objekt aus Client zum Server (unter Verwendung Json.Net) zu senden; eine funktionierende UDP-Client/Server-

Client-Seite vorausgesetzt, Sie haben bereits eine eigene Forschung getan und haben:

c1) Packet p = new Packet(); 
c2) //fill the properties 
c3) string json = JsonConvert.SerializeObject(p); 
c4) byte[] buf = Encoding.UTF8.GetBytes(json); 
c5) Send *buf* to server 

Server-Standort:

s1) Receive data from client(call it *buf*) 
s2) string json = Encoding.UTF8.GetString(buf); (must be equal to json at client site) 
s3) Packet p = JsonConvert.DeserializeObject<Packet>(json); 
s4) Tada........ 

Jetzt können Sie den gleichen Algorithmus verwenden Objekt senden von Server zu Client

PS: Solange Sie senden können und dann empfangen Gleiches Byte-Array mit UDP (c5 => s1), können Sie das ursprüngliche Objekt zurück erhalten.