场景再现
1.在调试同事程序的时候,程序需要从矢量网络分析仪中读取S参数数据。当S参数数据过多(10M左右大小)的时候,程序产生异常。
2.通过debug对比发现,程序中在接收到前面部分数据后,后续的数据被截断了。我用其它网络工具查询数据则不会产生此现象。
实现方案
1.通过readyRead信号触发数据读取
2.在槽函数中用read函数每次读取1024个字节(read函数一次读取的字节个数有限制,会根据系统架构不同有所不同。windows默认在8k)
3.当一次发送的数据量过大,导致程序触发10多次的readyRead信号后就不触发了(保护系统,万一单次发送1G的数据,那不是短时间会触发10万次的readyRead信号!?)。从而导致后续的数据被截断了,进而引发程序异常。
更改方案
1.通过read(MaxLen)扩大单次读取的限制,例如10M(1024*1024*10)
2.在槽函数中用readAll读取数据