C#网络通信传递复杂数据类型(结构体)

一、发送消息,封装消息

    public  void sendMessageToClient(int type,string id,string content, bool state, string ip) 
    {
        ep= new IPEndPoint(IPAddress.Parse(ip), 59999);

        //收发消息格式规定 类型 ID 内容 状态
        Message m = new Message();

        m.type = type;
        m.id = id;
        m.content = content;
        m.state = state; //按钮按下

        byte[] datas= getBytes(m);

        client.Send(datas,datas.Length,ep);
    }
    /// <summary>
    /// 将结构体消息封装为字节数组
    /// </summary>
    /// <returns></returns>
    public  byte[] getBytes(Message m) 
    {
        MemoryStream ms = new MemoryStream();
        BinaryWriter bw = new BinaryWriter(ms);

        bw.Write(m.type);
        bw.Write(m.id);
        bw.Write(m.content);
        bw.Write(m.state);

        return ms.ToArray();
    }

二、接收消息,解析消息

  private  void receiveMessageFromClient() 
    {
        byte[] datas = new byte[1024];
        Mutex mut = new Mutex();

        while (true) 
        {
            datas = client.Receive(ref ep);

            Message m = getStruct(datas);

            //Debug.Log("id==" + m.id+" state=="+m.state);

            setFlag(true);

            message = m;
        }
    }
    /// <summary>
    /// 将字节数组封装为消息结构体
    /// </summary>
    /// <param name="datas"></param>
    /// <returns></returns>
    public  Message getStruct(byte[] datas)
    {
        Message m = new Message();

        MemoryStream ms = new MemoryStream(datas,0,datas.Length);
        BinaryReader br = new BinaryReader(ms);
        
        m.type = br.ReadInt32();
        m.id = br.ReadString();
        m.content = br.ReadString();
        m.state = br.ReadBoolean();

        return m;
    }

三、消息数据结构

public struct Message 
{
   public int type;  //0:按钮点击事件

   public string id; //btn id

   public string content;// 消息内容 ,不需要可以为空

   public bool state;// true false

}

 


版权声明:本文为hyy_sui_yuan原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。