2017-09-08 45 views
-2

我正在做一个简单的程序,从另一个程序接收UDP数据包,我想把这个数据包转换成类。UDP数据包到类

我有一个类:

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

分组我接收是字节数组。我如何将数据包转换为一个类。我听说过编组,但我没有足够的经验去完全理解它。 我该怎么做。

谢谢。

+0

您需要编写读取二进制数据然后将数据转换为.NET字符串等的代码。有多种选择,您最终可以如何将该代码包装到某种惯用的东西中。但是,对于第一次尝试 - 只需编写代码(“Packet Parse(MemoryStream bytes)”) – BitTickler

回答

0

您需要使用序列化和反序列化将类对象从字节数组转换回字节数组。

这里是一个示例。

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

要从客户端发送一个目的是服务器(利用Json.Net);假设你已经做了自己的研究,并有一个工作UDP客户端/服务器

客户网站:

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 

服务器站点:

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........ 

现在你可以使用相同的算法发送对象从服务器到客户端

PS:只要您可以发送然后接收相同的使用UDP的字节数组(c5 => s1),您可以返回原始对象。