Socket通讯协议
来源:互联网 发布:java工程师转行 编辑:程序博客网 时间:2024/05/05 14:15
通讯协议的用途
在Socket强联网中,我们可以通过定义一些对数据封装的规则来进行数据的传输,让数据可以在服务器和客户端进行相互传输
自定义通讯协议的好处
在网络中可以使用把数据转换为Json字符串然后进行服务器和客户端的通讯,但是使用Json传输数据有一些缺点,第一就是Json不支持float类型的数据,第二就是数据转换为Json后会产生一些我们不需要的数据,这样会产生不必要的数据产生,所有我们使用自定义的通讯协议可以减少不必要的数据产生,减轻通讯的负担,性能会比使用Json好.
自定义通讯协议的规则
每条数据都有一个协议编号,在数据传输的时候也一并传输过去,让接受方可以知道传输的是哪个协议,可以使用对应的协议来接受,所以定义一个接口,协议必须实现这个接口
public interface IProto{ //协议编号 ushort ProtoCode { get; }}
测试协议
注:数据流的类
http://blog.csdn.net/qq_37551067/article/details/78229881
/// <summary>/// 测试协议/// </summary>public struct TestProto : IProto{ //编号 public ushort ProtoCode { get { return 1004; } } //测试属性 public int Id; public string Name; public int Type; public float Price; //把数据转换为Byte数组 public byte[] ToArray() { //在发送通讯协议时先获取协议的实例 //给属性附上需要的数据 //调用ToArray把数据写入数据流中在转换为数组 using (MMO_MemoryStream ms = new MMO_MemoryStream()) { ms.WriteUShort(ProtoCode); ms.WriteInt(Id); ms.WriteUTF8String(Name); ms.WriteInt(Type); ms.WriteFloat(Price); return ms.ToArray(); } } //解析数据 public static TestProto GetProto(byte[] buffer) { //协议编号是ushort类型,占两个字节 //在Socket通讯中解析数据获取协议编号 //用对应的协议类的静态方法解压数据 //把buffer数据写入流中 //按照写入的顺序对应读取 TestProto proto = new TestProto(); using (MMO_MemoryStream ms = new MMO_MemoryStream(buffer)) { proto.Id = ms.ReadInt(); proto.Name = ms.ReadUTF8String(); proto.Type = ms.ReadInt(); proto.Price = ms.ReadFloat(); } return proto; }}
阅读全文
4 0
- Socket通讯协议
- Socket通讯协议与socket安全
- VC中的socket通讯例程(TCP协议)
- 创建基于UDP协议的socket通讯
- VC中的socket通讯例程(UDP协议)
- Socket开发之通讯协议及处理
- Socket开发之通讯协议及处理
- Socket开发之通讯协议及处理
- Socket开发之通讯协议及处理
- Socket开发之通讯协议及处理
- Socket开发之通讯协议及处理
- Socket开发之通讯协议及处理
- Socket开发之通讯协议及处理
- Socket开发之通讯协议及处理
- Socket开发之通讯协议及处理
- Socket开发之通讯协议及处理
- Socket开发之通讯协议及处理
- Socket开发之通讯协议及处理
- 【makefile】一起写makefile(一)
- selenium自动化之鼠标事件
- URL编码对照表
- springboot 无法关闭
- XListview第三方listview布局框架
- Socket通讯协议
- 安卓banner实现
- 【数据结构与算法】数据结构备忘
- 中电海康校招面试数据存储与处理事业部
- 地质英语---地质年代图
- 万维网的发明者——蒂莫西
- Java编程思想第7章习题
- android 让一个控件按钮居于底部的几种方法
- Okhttp框架搭建及拦截器