找回密码
 立即注册
收起左侧

QT socket 通信自动发送数据

8
回复
9758
查看
[复制链接]
累计签到:15 天
连续签到:1 天
来源: 2018-4-27 21:41:42 显示全部楼层 |阅读模式
2Qter豆
我把要发送的数据写入了一个txt文档,然后在textedit里通过QFile 已逐条读取的方式打开,手动点击发送按钮,数据能正常发给接收端,当我使用定时器每2秒让其自动发送一组数据时,前两个数据能正常接收,后面的就会出现黏包,界面还会卡死,请问大神们这是为什么?
发送端程序:


接收端程序:Python写的


接收端运行的结果:

要发送的数据:

最佳答案

查看完整内容

粘包问题是需要我们自己处理的,我是这样处理的,在发送端发送数据的时候,每一条数据后面加上一个特殊符号, 比如 # 然后,在接受端,通过 splite('#') ,把数据分离,循环处理,这样不管怎么粘包都不会出问题了,你说的界面卡死是因为包的长度和你预期的不一样,你用处理正确包的逻辑来处理错误的包,很容易出现数组越界、内存泄露之类的问题,导致界面卡死或者程序崩溃,我估计你也没有做异常处理;别的方法我也不知道,这个方 ...
回复

使用道具 举报

累计签到:742 天
连续签到:1 天
2018-4-27 21:41:43 显示全部楼层
本帖最后由 Since 于 2018-4-28 08:56 编辑

粘包问题是需要我们自己处理的,我是这样处理的,在发送端发送数据的时候,每一条数据后面加上一个特殊符号, 比如 #
然后,在接受端,通过 splite('#') ,把数据分离,循环处理,这样不管怎么粘包都不会出问题了,你说的界面卡死是因为包的长度和你预期的不一样,你用处理正确包的逻辑来处理错误的包,很容易出现数组越界、内存泄露之类的问题,导致界面卡死或者程序崩溃,我估计你也没有做异常处理;别的方法我也不知道,这个方式很笨,如果你没有好的方式,可以试试这个方法~(PS: 你的问题格式内容很有问题,记得以后用点心编辑问题,这样别人才有心情帮你解决问题)
回复

使用道具 举报

累计签到:15 天
连续签到:1 天
2018-4-28 08:59:23 显示全部楼层
Since 发表于 2018-4-28 08:55
粘包问题是需要我们自己处理的,我是这样处理的,在发送端发送数据的时候,每一条数据后面加上一个特殊符号 ...

谢谢啦,谢谢大神....................
回复

使用道具 举报

累计签到:742 天
连续签到:1 天
2018-4-28 11:08:05 显示全部楼层
问题解决了,记得结贴~

点评

层主您好,我在Qt使用UDP通信出现一个问题。 本来是准备用UDP做一个服务器,在bind了本地ip和端口之后,write的数据都会被自己获取而客户端收不到服务器数据 这种有什么办法解决吗? ps:我客户端和服务器都在同一  详情 回复 发表于 2020-3-21 13:18
回复

使用道具 举报

累计签到:15 天
连续签到:1 天
2018-4-29 19:18:47 显示全部楼层
Since 发表于 2018-4-28 11:08
问题解决了,记得结贴~

好的,还有问题 。。。。
回复

使用道具 举报

累计签到:256 天
连续签到:1 天
2020-3-21 13:18:22 显示全部楼层
Since 发表于 2018-4-28 11:08
问题解决了,记得结贴~


层主您好,我在Qt使用UDP通信出现一个问题。
本来是准备用UDP做一个服务器,在bind了本地ip和端口之后,write的数据都会被自己获取而客户端收不到服务器数据
这种有什么办法解决吗?
ps:我客户端和服务器都在同一个电脑上测试,同样的ip和端口

点评

UDP 服务器确实是无法主动获取数的,这个必须是客户端发送,服务端接收,然后回复客户端  详情 回复 发表于 2020-4-14 08:14
回复

使用道具 举报

累计签到:742 天
连续签到:1 天
2020-4-14 08:14:16 显示全部楼层
z55716368 发表于 2020-3-21 13:18
层主您好,我在Qt使用UDP通信出现一个问题。
本来是准备用UDP做一个服务器,在bind了本地ip和端口之后, ...

UDP 服务器确实是无法主动获取数的,这个必须是客户端发送,服务端接收,然后回复客户端

点评

嗯,已经做成A监听一个端口;B监听一个端口。然后相互收发。  详情 回复 发表于 2020-4-26 20:42
回复

使用道具 举报

累计签到:256 天
连续签到:1 天
2020-4-26 20:42:51 显示全部楼层
Since 发表于 2020-4-14 08:14
UDP 服务器确实是无法主动获取数的,这个必须是客户端发送,服务端接收,然后回复客户端  ...

嗯,已经做成A监听一个端口;B监听一个端口。然后相互收发。
回复

使用道具 举报

累计签到:12 天
连续签到:1 天
2020-5-2 00:38:04 显示全部楼层
双方通信中,建议收发要确认一下,特别是高频收发数据的时候.太多时候,我们所谓的实时系统不会那么实时,客户端未取走上次所发数据,但是服务端已经把下次数据发送.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了