Qtcpsocket 读取数据Read的奇怪问题

sdu_hanson 2014-07-04 04:48:41
read函数有两个参数read(buf,maxSize);
buf是接收缓冲区,maxsize是一次接收最大字节数

我这边有个嵌入式linux作为server,
从server上取数据的时候总取不下来

后来发现竟然是maxSzie参数的问题。

我把这个参数设置成16000或以下,完全没问题。

这个数字如果大一点的话,就完全接不到数据。

这只不过是一个界限数字,为什么会影响套接收。


有知道这是什么原因的么,我郁闷了。

...全文
1555 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdu_hanson 2014-07-07
  • 打赏
  • 举报
回复
引用 3 楼 foruok 的回复:
TCP可能会粘包,你得到数据大小后可以使用 bytesAvailable() 查看还有没有数据,有的话继续读,否则等下次 readyRead() 信号
确实是循环读的,但是只要第二个参数大于16000,返回的字节数必定是0, 小于16000,返回的数据就不是0. 很奇怪
foruok 2014-07-06
  • 打赏
  • 举报
回复 1
TCP可能会粘包,你得到数据大小后可以使用 bytesAvailable() 查看还有没有数据,有的话继续读,否则等下次 readyRead() 信号
sdu_hanson 2014-07-05
  • 打赏
  • 举报
回复
我也是这么做的, 两次握手,第一次获得接收数据的大小然后分配buf大小, 然后再发送指令开始接收数据
引用 1 楼 foruok 的回复:
要和buf大小配合起来,不能超过buf的实际大小,它的返回值会可能小于你指定的界限。
foruok 2014-07-04
  • 打赏
  • 举报
回复
要和buf大小配合起来,不能超过buf的实际大小,它的返回值会可能小于你指定的界限。

16,233

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧