QTcpSever 和 QTcpSocket 循环write 数据写不去

疯狂的面包 2012-05-15 06:17:08
例如有一个
tcpsocket
while(10 > i)
{
tcpsocket.write(一个包)
++i;
}

数据 写不出去 不知道怎么版
求打救 急啊

还有 有qt的 im系统的 服务器端 和 客户端吗? 求例子 非常急
...全文
547 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
HappyJandun 2013-12-05
  • 打赏
  • 举报
回复
菜鸟学习了,我也越到类似问题了。
blueliuyun 2012-05-28
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]
这就需要定义通讯协议。明确的告诉对方你的数据怎么才算发完了。

常见的方式有两种:
1. 在你要发送的数据的最前端加两个或四个字节的长度标志。对端在接收时,必须先收满这些个字节,从而得出发送数据的准确长度。然后就一直等待,等待这些数据全部收到。期间可能会激发数次readyRead.这种方法适合二进制数据发送。

2. 使用XML,具体参考QXmlStreamReader,当你发送了一个完……
[/Quote]

谢谢 xiachm 分享这么好的经验!
xiachm 2012-05-17
  • 打赏
  • 举报
回复
这就需要定义通讯协议。明确的告诉对方你的数据怎么才算发完了。

常见的方式有两种:
1. 在你要发送的数据的最前端加两个或四个字节的长度标志。对端在接收时,必须先收满这些个字节,从而得出发送数据的准确长度。然后就一直等待,等待这些数据全部收到。期间可能会激发数次readyRead.这种方法适合二进制数据发送。

2. 使用XML,具体参考QXmlStreamReader,当你发送了一个完整的XML格式数据时,最后一行必定是EndDocument,可以用这个来判断数据接收完毕。这种方法更适合文本数据发送
疯狂的面包 2012-05-17
  • 打赏
  • 举报
回复
感谢大家的帮助,尤其是xiachm。现在比较清楚这个问题了。
xiachm 2012-05-16
  • 打赏
  • 举报
回复
数据一直阻在发送缓冲区吗?这也许不是发送的问题,而是对端接收的问题
疯狂的面包 2012-05-16
  • 打赏
  • 举报
回复
waitForBytesWritten 我尝试过了 还是 发不出去
xiachm 2012-05-16
  • 打赏
  • 举报
回复
你的数据量很大吗?使用waitForBytesWritten做一下等待
疯狂的面包 2012-05-16
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]

readyRead不会知道客户端调用了几个write,它只负责在有数据到达时触发,等你真正接收时,或许已经能够收到所有的数据了。这要看你发送的信息量了,如果很少的话,一次readyRead就能读到所有数据!但切记,这不是必然的!
[/Quote]

那么我应该 怎么发送数据 和 接收数据呢
我如何知道需要读多少数据
比如我 write( 1024字节 )

write( 1024字节 )

如果 只有一个onreadyread信号发出, 我怎么知道第二个数据已经发出
我应该怎么改变发包 和 收包的方式?
求大牛解答?感谢啊
疯狂的面包 2012-05-16
  • 打赏
  • 举报
回复
那么我应该 怎么发送数据 和 接收数据呢
我如何知道需要读多少数据
比如我 write( 1024字节 )

write( 1024字节 )

如果 只有一个onreadyread信号发出, 我怎么知道第二个数据已经发出
我应该怎么改变发包 和 收包的方式?
求大牛解答?感谢啊
xiachm 2012-05-16
  • 打赏
  • 举报
回复
readyRead不会知道客户端调用了几个write,它只负责在有数据到达时触发,等你真正接收时,或许已经能够收到所有的数据了。这要看你发送的信息量了,如果很少的话,一次readyRead就能读到所有数据!但切记,这不是必然的!
疯狂的面包 2012-05-16
  • 打赏
  • 举报
回复
接收端 我响应onreadyread的信号
对服务端调试的时候 如果我 在4个write的地方都停一下 等一下接着再发 客户端发出四次onreadyread信号
这说明都收到了。
但是服务端直接运行,客户端调试只收到1个onreadyread信号。其他3个write都没有了。
zhu_xz 2012-05-16
  • 打赏
  • 举报
回复
先看看是不是你的数据还没有发送出去,程序就结束了
再看看是不是你接受端只接收一次数据
疯狂的面包 2012-05-16
  • 打赏
  • 举报
回复
我已经确认过数据参数 没有问题了
注释掉 1 能发 2
注释掉 2 能发 3
。。。。。

skdjfsk 2012-05-16
  • 打赏
  • 举报
回复
估计你write函数的参数有问题,确认参数包含所要写的所有数据
疯狂的面包 2012-05-15
  • 打赏
  • 举报
回复
可能有同学不明白我的意思

使用QTcpSocket的时候
比如 连续进行写
socket.write("数据1")
socket.write("数据2")
socket.write("数据3")
socket.write("数据4")

这时候, 数据2,3,4 有99.99%数据发不出去 不知道为什么?
疯狂的面包 2012-05-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

进入事件循环了吗?
[/Quote]

请教 什么是事件循环??
我write的时候 能发出去第一个包 下面的包发不出去
qt的例子 都是 一发 一收的 没见过连续发包 不知道是什么问题 求好心人 解决 急啊
zhu_xz 2012-05-15
  • 打赏
  • 举报
回复
进入事件循环了吗?

16,216

社区成员

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

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