利用qt tcpsocket接受大数据包,但是数据只能接受至5k,之后的数据丢失严重,求指教!
数据接受代码如下:QByteArrayviewer::ReadData()//读取数据{qsocket->setReadBufferSize(1024*768*4);if...
数据接受代码如下:
QByteArray viewer::ReadData() //读取数据
{
qsocket->setReadBufferSize(1024*768*4);
if(qsocket->bytesAvailable() < (int)sizeof(quint16)) return "";
QByteArray val=qsocket->readAll();
QByteArray arr=val.toHex();
return val;
}
将接收的数据一次性读取至QByteArray val中。 展开
QByteArray viewer::ReadData() //读取数据
{
qsocket->setReadBufferSize(1024*768*4);
if(qsocket->bytesAvailable() < (int)sizeof(quint16)) return "";
QByteArray val=qsocket->readAll();
QByteArray arr=val.toHex();
return val;
}
将接收的数据一次性读取至QByteArray val中。 展开
1个回答
2014-03-17
展开全部
对于大数据包 建议还是分段传送 也就是你要自己写一个关于发送接收的协议 一次性读取或者发送是一个不太好的做法 虽然TCP在发送过程中会有数据的验证什么的 但是如果缓冲区一下子就满了 起始还是会丢失部分数据的
建议分段发送跟分段接收
既由客户端来决定发送的频率 (假定1M的数据包 分段称8K的一个小包 那么就变成 发送128次 在客户端接收到其中的一个包假定是第N个 在接收完了 并且验证数据是正确的时候 那么就在客户端发送给服务端一个请求的数据包 让服务器发送第N+1个数据包 依次处理)
建议分段发送跟分段接收
既由客户端来决定发送的频率 (假定1M的数据包 分段称8K的一个小包 那么就变成 发送128次 在客户端接收到其中的一个包假定是第N个 在接收完了 并且验证数据是正确的时候 那么就在客户端发送给服务端一个请求的数据包 让服务器发送第N+1个数据包 依次处理)
追问
我现在遇到的问题是,服务器那边是一次性发送数据的,所以客户端才遇到了这种问题,该如何解决呢?
追答
你可以先用网络调试助手 这个工具 来看看能否完整的收到服务端发来的信息 用以排除是网络问题 还是你的代码问题 具体情况得通过网络调试助手能否完整的收到再分析
具体得看接收函数的代码是如何写的了 不同的语言用不同的判断方法 大部分在不确定对方发送的长度的情况下 是通过判断是否到了数据的最尾 然后就一次读取规定好的长度 然后拼接一下 再转换了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询