数据传输项目(二)

1、客户端与服务端需要交换数据:

socket API编程

两台机器通信:操作系统平台不同、网络字节序的转换、字节序对齐不同、服务开发语言不同

上述4种情况都需要对数据进行编解码操作

报文:数据

2、面向对象设计

类的UML画法

1、继承:使用带空心箭头的实线,箭头指向父类

父类:public protected private

子类:public protected private

public继承:public:类外可以访问 protected:类内访问 private:基类自己类内访问

protected继承:protected protected private 

private继承:都不可以访问

如果没有继承,类内部没有限制,可以相互访问,外部只有public可以访问

如果有继承,private继承,子类成员不可以访问;protected继承,protected成员子类可以访问

含虚函数的类不能实例化,只有全部实现虚函数才可以实例化

抽象类用斜体表示

单向关联关系:单项实线箭头

双向关联关系:双向实线箭头

自关联关系:指向自己的箭头

聚合关系:整体和部分关系:空心的菱形+箭头:箭头指向成员,菱形指向整体

组合关系:整体和部分关系:整体和部分具有同生共死,不能单独存在:带实行菱形的箭头

 依赖关系:带箭头的虚线表示,由依赖的一方指向被依赖的一方:类的成员函数用到某个类的对象

3、常见的几种编解码方式

  1. XML类似于html:允许自己定义标签
  2. Json
  3. Protocol Buffer
  4. ASN.1抽象语法标记
  5. boost 序列化的类
  6. 自定义的格式

4、ASN.1:描述一种对数据进行表示、编码和解码的数据格式

  1. 一部分描述信息内数据,数据类型及序列格式:相当于属性
  2. 一部分描述如何将各部分组成消息:相当于方法

标准编码规则:

  1. 基本编码规则(BER)
  2. 规范编码规则(CER)
  3. 唯一编码规则(DER)
  4. 压缩编码规则(PER)
  5. XML编码规则(XER)

编码格式(TLV)

tag(type)  length value

每个数据打包成一个TLV结构体,组成链表,然后总的再组成一个TLV结构体

5、将C源函数封装成类原则

  1. 将宏定义------->const 常量:主要是整形和字符串,一些连续的整型值可以改写成枚举值
  2. 宏函数:简单的宏函数可以改写成内联函数,如果比较复杂可以改写成类的成员函数
  3. 若成员函数都用到了某个变量,可以将这个变量设置成类的成员变量
  4. 通过类的访问控制权限控制类的某些成员可以外部访问:一般设置成public

多态:

  1. 有继承关系
  2. 父类成员函数声明为virtual的,且子类重写父类的成员函数
  3. 有父类的指针或引用指向子类的对象,通过父类指针调用子类对象的方法
含有纯虚函数的类称之为抽象类,它不能生成对象即创建实列,只能创建它的派生类的实例。
抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出。
如果派生类中没有重新定义纯虚函数,而只是继承基类的纯虚函数,则这个派生类仍然还是一个抽象类。
如果派生类中给出了基类纯虚函数的实现,则该派生类就不再是抽象类了,它是一个可以建立对象的具体的类。
————————————————
版权声明:本文为CSDN博主「Amoricc」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44244332/article/details/123507232

ASN.1类图

简单工厂模式:

工厂:使用一个单独的类来创建实例的工程,通过参数来创建不同的对象

简单工厂:把对象的创建放到一个工厂类,通过参数来创建不同的对象

特点:

缺点:每次添加一个对象,就需要对简单工厂进行修改

优点:去除了与具体产品的依赖

自己的理解:创建一个总的工厂,然后根据需求创建不同的特例子工厂类,在实例化时用父指针指向子类对象(即自己特例化的子类),然后调用子类的创建函数,即是上图的最后一块,这个时候再增加新的类,只需要增加子类就行了,不必增加原来的工厂类代码,牛!

使用步骤:

  1. 创建一个工厂类对象,父类指针指向子类工厂对象
  2. 使用父类指针这项子类对象的createcodec函数创建对象
  3. 由第二步创建处理的对象由其父类指针指向
  4. 调用子类编解码成员函数

7、单向散列函数

输入:消息-------->输出:散列值

特点:

  1. 压缩性:任意长度的数据,算出的值是固定的
  2. 容易计算
  3. 抗修改性
  4. 强抗碰撞性
  5. 单向性(不可逆)

8、日志:日志级别越高,打印日志越少

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值