Socket通讯协议与socket安全

转自:http://blog.csdn.net/qq_37551067/article/details/78242587

作者为:qq_37551067


通讯协议的用途

在Socket强联网中,我们可以通过定义一些对数据封装的规则来进行数据的传输,让数据可以在服务器和客户端进行
相互传输

自定义通讯协议的好处

在网络中可以使用把数据转换为Json字符串然后进行服务器和客户端的通讯,但是使用Json传输数据有一些缺点,第
每条数据都有一个协议编号,在数据传输的时候也一并传输过去,让接受方可以知道传输的是哪个协议,可以使用对应
一就是Json不支持float类型的数据,第二就是数据转换为Json后会产生一些我们不需要的数据,这样会产生不必要的
数据产生,所有我们使用自定义的通讯协议可以减少不必要的数据产生,减轻通讯的负担,性能会比使用Json好.。

自定义通讯协议的规则

每条数据都有一个协议编号,在数据传输的时候也一并传输过去,让接受方可以知道传输的是哪个协议,可以使用对
应的协议来接受,所以定义一个口,协议必须实现这个接口

public interface IProto
{
    //协议编号
    ushort ProtoCode { get; }
}  


测试协议

注:数据流的类
/// <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;
    }
}




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值