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

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值