QTcpSocket接收通过网络单次发送的大批量数据导致异常

场景再现

  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读取数据

posted @ 2025-03-18 14:00  xianyongchao  阅读(214)  评论(0)    收藏  举报