项目遇到问题及解决方案

来源:互联网 发布:海鹰数据官网 编辑:程序博客网 时间:2024/05/20 09:43

1、QT滚动条问题

qt自带的滚动条,每次点击最大移动10%,为了良好的用户体验,滚动条进行重写实现了无限制滚动。

并且对进度条、音量条与UI主界面分离,底层逻辑相结合,提高了复用性。

 

2、UI界面相同问题

本地的音视频列表界面采用的是同一个UI界面,开始设计的时候,俩个界面用了一个UI类对象,导致了这个UI类对象十分代码臃肿,相同意义的成员变量过多。

后来采取了,这俩个UI界面各用一个对象

 

3、TCP接受沾包处理:

TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。

粘包情况有两种,一种是粘在一起的包都是完整的数据包、另一种情况是粘在一起的包有不完整的包

原因:它既可能由发送方造成,也可能由接收方造成。

1、发送方引起的粘包是由TCP协议本身造成的,TCP为提高传输效率,发送方往往要收集到足够多的数据后才发送一包数据。若连续几次发送的数据都很少,通常TCP会根据优化算法把这些数据合成一包后一次发送出去,这样接收方就收到了粘包数据

2、接收方引起的粘包是由于接收方用户进程不及时接收数据,从而导致粘包现象。这是因为接收方先把收到的数据放在系统接收缓冲区,用户进程从该缓冲区取数据,若下一包数据到达时前一包数据尚未被用户进程取走,则下一包数据放到系统接收缓冲区时就接到前一包数据之后,而用户进程根据预先设定的缓冲区大小从系统接收缓冲区取数据,这样就一次取到了多包数据

自定义数据包基本格式:

类型(1)+大小(4)+数据(n)

 

基本分包算法:

取出:只拷贝缓冲区数据,而不进行删除

(1)开辟一块socket接收缓冲区

(2)接收数据存入缓冲区尾部

(3)判断缓冲区数据满足类型大小否,不满足,返回(2);满足则取出数据

(4)判断缓冲区剩余数据满足包体大小否,不满足,返回(2);满足则取出数据

(5)判断缓冲区剩余数据满足数据大小否,不满足,返回(2);满足泽取出数据

(6)根据数据包类型,进行数据包处理

(7) 清除缓冲区中已处理的数据包

 

4、不满足基本数据包格式的数据包处理:

比如说一个请求数据包,只包含了一个一字节的数据包类型。基本数据包的处理方式接下来是要继续读出数据的大小。但是接下来的数据则是下一个数据包

 

这种情况下,我们通过对数据包类型进行单独处理,根据类型判断,下一次应该读出的是什么数据。

 

原创粉丝点击