完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
如题:STM32F1 LWIP UDP 一个设备广播发送数据到同一个物理网络上的其他 N 个设备上,接收广播数据的设备数量不固定而且IP也不确定,这些设备都通过网线连接到一个交换机上,接受广播数据的设备经常丢一两个包,怎么解决?
|
|
相关推荐
13个回答
|
|
UDP通信只管发出,不管对方是否收到,可以按照485总线通信对照理解。
在通信的环节通道上(无论有线或无线),都可能出现阻塞或丢失的情形,所以对于UDP这种通信方式,丢包是不可避免的。 如果你想不丢包或者少丢包,那么可以改用TCP方式,TCP方式系统在底层有包括ACK和重发等机制在内的各种算法,来努力确保不仅管把数据给发出,而且还会管对方是否收到,可以按照CAN总线通信来对照理解。 或者,如果你继续使用UDP,那么可以在应用层自己加上一定的ACK校验机制。 TCP通信的可靠性高,但是效率不如UDP. 如果你对通信的可靠性要求不是非常严格,也不想自己做ACK,你也可以考虑如下方法,提高UDP通信的可靠性和降低丢包率:提高信号强度例如调整天线方向缩短距离或者外接高增益天线。 ESP8266高速通信模块,在F1上实测TCP速度到700K字节每秒,F4和F7上达到和超过M字节每秒,提供单片机例程和技术支持 |
|
|
|
接收广播数据的设备数量和IP都是不固定的,所以用不了TCP,就算加上ACK机制也没用,因为有的设备应答ACK,有的设备没有应答ACK,主机该如何确保全部设备都接收到了数据?
|
|
|
|
|
|
|
|
|
|
如果数据发生错误,考虑加上校验位,会不会好点?
|
|
|
|
不是数据错误,是丢包
|
|
|
|
目前这样做:主机广播一条指令,收到广播指令的设备就从主机上获取固定长度的数据,获取完成后就不再获取了,这样的话每条数据数据都能获取到,但是有一个隐患,如果设备接收不到第一条广播指令,那么这个设备就不会去获取数据了,虽然目前测试了都成功,但是这个隐患还是存在的。
暂时没想到什么好办法,就先这样做了 |
|
|
|
|
|
|
|
能问一下发的是什么样的数据和数据包的大小,我之前做的有UDP通信,加交换机,数据量也很大,但是没有发生丢包的情况
|
|
|
|
丢包也可以加,减少丢包现象
|
|
|
|
|
|
|
|
大哥,能给你的代码参考一下吗?
|
|
|
|
原子老师你好,有个问题想请教一下你,STM32 TCP Server 的 http_poll 周期性回调函数里如何发送2000字节左右的大数据包?数据包超过1500字节了,数据包被分成2包,但是客户端只接收到一包数据。请问怎么如何解决呢?
|
|
|
|
只有小组成员才能发言,加入小组>>
如何使用STM32+nrf24l01架构把有线USB设备无线化?
2544 浏览 7 评论
请问能利用51单片机和nRF24L01模块实现实时语音无线传输吗?
2331 浏览 5 评论
3158 浏览 3 评论
2803 浏览 8 评论
为什么ucosii上移植lwip后系统进入了HardFault_Handler?
2761 浏览 4 评论
请教各位大咖:有没有接收频率32M左右的芯片推荐的?先感谢啦!
608浏览 1评论
853浏览 0评论
968浏览 0评论
621浏览 0评论
447浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 12:17 , Processed in 1.471101 second(s), Total 101, Slave 84 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号