前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >c#网络模块

c#网络模块

作者头像
立羽
发布2023-08-24 15:10:35
发布2023-08-24 15:10:35
13800
代码可运行
举报
文章被收录于专栏:Unity3d程序开发Unity3d程序开发
运行总次数:0
代码可运行

1数据包

在传输网络数据的时候,接收方一次收到的数据长度可能是不确定的,比如客户端发送了100个字节给服务器,服务器有可能一次收到100个字节,也可能先收到20个,再收到80个。为了知道到底一个数据的长度是多少,我们将首先创建一个类,用于管理序列化的数据流,序列化、反序列化对象。

NetPacket这个类提供的功能主要包括两部分:一部分是将序列化的数据写入,并加入4个字节作为数据的“头”;另一部分是从byte数组的前4个字节解析数据长度,再读取相应长度的数据。这里是把protobuf的序列化处理。

1.1protobuf序列化

1.protobuf序列化为byte数组

代码语言:javascript
代码运行次数:0
复制
        /// <summary>
        /// protobuf序列化成byte
        /// </summary>
        /// <typeparam name="T">protobuf的类</typeparam>
        /// <param name="t">protobuf值</param>
        /// <returns>protobuf序列化后的byte数组</returns>
        public byte[] ProtoRuntimeSerialize<T>(T t)
        {
            byte[] bs;
            using (System.IO.MemoryStream stream = new System.IO.MemoryStream())
            {
                ProtoBuf.Meta.RuntimeTypeModel model = ProtoBuf.Meta.RuntimeTypeModel.Create();
                model.Serialize(stream, t);
                bs = stream.ToArray();
            }
            return bs;
        }

2.byte数组写入数据流

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-09-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1数据包
    • 1.1protobuf序列化
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档