社区
Qt
帖子详情
QTcpSever 和 QTcpSocket 循环write 数据写不去
疯狂的面包
2012-05-15 06:17:08
例如有一个
tcpsocket
while(10 > i)
{
tcpsocket.write(一个包)
++i;
}
数据 写不出去 不知道怎么版
求打救 急啊
还有 有qt的 im系统的 服务器端 和 客户端吗? 求例子 非常急
...全文
547
17
打赏
收藏
QTcpSever 和 QTcpSocket 循环write 数据写不去
例如有一个 tcpsocket while(10 > i) { tcpsocket.write(一个包) ++i; } 数据 写不出去 不知道怎么版 求打救 急啊 还有 有qt的 im系统的 服务器端 和 客户端吗? 求例子 非常急
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
进入事件循环了吗?
QT
cp
S
ocket readyread不触发或者只触发几次,readAll()丢
数据
,收不全
数据
的原因及解决办法
QT
cp
S
ocket readyread不触发或者只触发几次,readAll()丢
数据
,收不全
数据
的原因及解决办法
QT
开发经常发生
socket
的readyread只触发几次,怍不全
数据
,丢包丢
数据
的现象,网上有一堆解释和解决方案,比如...
基于
QT
的Network模块的
QT
cp
S
erver和
QT
cp
S
ocket,进行网络的文件传输 可传输大型文件如Dicom
数据
等
基于
QT
的Network模块的
QT
cp
S
erver和
QT
cp
S
ocket,进行网络的文件传输。可传输大型文件如Dicom
数据
等。
QT
cp
S
ocket通信编程时阻塞与非阻塞的问题 - findumars - 博客园1
1. 编程理解(36) 1. 经典资料(15) 1. 开源项目(16) 9.SaaS-云存储,云服务(38) 9.SaaS-云计算-学习(38)
QT
cp
S
ocket示例
Qt
通过
QT
cp
S
ocket接受
数据
,发送
数据
、连接以及断开。
QT
cp
S
ocket和
Qt
cp
S
erver实现聊天小工具
有一段时间没有使用
socket
编程了,这两天抽时间使用
Qt
cp
S
ocket和
QT
cp
S
erver
写
了一个简单的聊天小工具。
Qt
16,216
社区成员
26,595
社区内容
发帖
与我相关
我的任务
Qt
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
复制链接
扫一扫
分享
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章