嵌入式开发之UDP 丢包--- UDP 丢包控制方法

0. 发送端可以,发送五次左右,再Sleep

1、调用recv方法接收端收到数据后,处理数据花了一些时间,处理完后再次调用recv方法,在这二次调用间隔里,发过来的包可能丢失。对于这种情况可以修改接收端,将包接收后存入一个缓冲区,然后迅速返回继续recv。

2、发送的包巨大丢包。虽然send方法会帮你做大包切割成小包发送的事情,但包太大也不行。例如超过50K的一个udp包,不切割直接通过send方法发送也会导致这个包丢失。这种情况需要切割成小包再逐个send。

3、发送的包较大,超过mtu size数倍,几个大的udp包可能会超过接收者的缓冲,导致丢包。这种情况可以设置socket接收缓冲。以前遇到过这种问题,我把接收缓冲设置成64K就解决了。
int nRecvBuf=32*1024;//设置为32K
setsockopt(s,SOL_SOCKET,SO_RCVBUF,(const
char*)&nRecvBuf,sizeof(int));

具体设置代码可以参考下面链接:
http://blog.sina.com.cn/s/blog_a459dcf5010153mp.html

4、发送的包频率太快,虽然每个包的大小都小于mtu size 但是频率太快,例如40多个mut
size的包连续发送中间不sleep,也有可能导致丢包。这种情况也有时可以通过设置socket接收缓冲解决,但有时解决不了。

5、局域网内不丢包,公网上丢包。这个问题我也是通过切割小包并sleep发送解决的。如果流量太大,这个办法也不灵了。总之udp丢包总是会有的,如果出现了用我的方法解决不了

http://ask.csdn.net/questions/257808

http://blog.csdn.net/lyq19870515/article/details/8008612

http://blog.csdn.net/ggxxkkll/article/details/7894112

http://blog.csdn.net/xingzheouc/article/details/49946191

http://blog.sina.com.cn/s/blog_a459dcf5010153nd.html

时间: 2024-10-07 13:32:54

嵌入式开发之UDP 丢包--- UDP 丢包控制方法的相关文章

嵌入式开发之GCC编译器使用

嵌入式开发之GCC编译器使用 Linux系统下GCC是GNU推出的功能强大的性能优越的多平台编译器,是GNU的代表作之一.GCC 可以在多种硬件平台上编译出可执行程序,其执行效率一般比其他编译器高%20到%30.GCC编译器能将C C++语言程序汇编程序编译,链接成可执行程序.在linux文件没有统一的后缀,系统从文件的属性来区分可执行程序和不可执行程序.  1.1GCC编译程序的四个阶段 预处理(Pre-Processing) 编译(Comping) 汇编(Assembing) 连接(Link

嵌入式开发之davinci--- 8148/8168/8127 中的alsa音频pcm g711 和aac 音频格式

(1)alsa pcm (2)g711 (3)aac (4) --------------author:pkf -------------------time:2-4 ---------------------------qq:1327706646 (1)alsa pcm (2)g711 G.711 G.711 也称为PCM(脉冲编码调制),是国际电信联盟订定出来的一套语音压缩标准,主要用于电话.它主要用脉冲编码调制对音频采样,采样率为8k每秒.它利用一个 64Kbps 未压缩通道传输语音讯号.

嵌入式开发之davinci--- 8148/8168/8127 中的xdc 简介

XDC是TI公司为嵌入式实时系统可重用软件组件(在XDC里被成为packages,以下成为包)制定的一套标准.它包括一些有用的工具,标准的API函数,静态配置文件和打包(packaging)操作.XDC最主要的亮点在于它标准化了传递过程,并简化了在应用程序中引用目标平台下其他包的过程. 本文从一个简单的“Hello,World“入手,引领大家进入XDC开发世界. 在XDC开发世界中,首先需要明确两个概念,package和repository. 所谓package,类似与java里的jar文件或.

嵌入式开发之 STM32自行车码表(图文)

笔者将从以下几个方面逐步深入地讲解STM32F103C8开发板的使用,并在Windows下编写一个简单的自行车码表程序: 元器件 环境搭建 电路连接 一个简单的LED闪烁程序 自行车码表 准备工作之 元器件 准备工作之 电路连接 准备工作之 环境搭建 CubeMX配置 KeilST-LINK下载程序调试程序 下载并注册安装Keil Keil安装程序及注册机 用keil打开CubeMX生成的工程文件 build keilST-LINK下载和调试以blink为例 出错误了 解决方法一 解决方法二 连

嵌入式开发之davinci--- 8148/8168/8127 中的High-DefinitionVideo Processing Subsystem (HDVPSS)

High-DefinitionVideo Processing Subsystem (HDVPSS) 这一章介绍了高清视频处理子系统(HDVPSS). 2.1导论 2.1.1 简介 HDVPSS 使用TI开发的算法,灵活的复合和融合引擎,各种高质量外部视频接口,实现视频/图像显示和采集处理功能.   2.1.3 缩略语 名称 定义 COMP Compositor 复合器 DEI De-Interlacer 去隔行 DEIH High quality De-Interlacer 高质量去隔行 DV

嵌入式开发之davinci--- DVRRDK, EZSDK和DVSDK这三者有什么区别

下载的时候选择信息要避免security类型的产品,这个是要审查的. DVRRDK是专门针对DVR的开发包是非公开的,针对安防的客户定制的,效率要高. EZSDK是开放的版本架构上使用openmax可以为android提供支持 DVSDK是老的版本名称使用codec engine架构,现在新的芯片DM8xxx都是EZSDK了 三种不同的软件框架,使用不同的方法来利用dsp工作. http://blog.csdn.net/zhouzhuan2008/article/details/8512128

嵌入式开发之web服务器---boa移植

近段时间在做ti8148的编解码器又涉及到boa web服务器的移植.在移植到ARM开发板的过程中,遇到很多的问题.原先的自带thttpd 由于功能没有boa完善,比如在ubuntu下面的utf-8编码的网页在thttpd中给客户浏览器显示的是默认ios欧洲乱码,但是boa显示正常,就干掉了 现将移植步骤整理如下:(其中涉及到个人习惯和路径问题,视各自情况而定) 1.下载源码: 下载网址http://www.boa.org/boa-0.94.13.tar.gz,但实际上下载的包为boa-0.94

嵌入式开发之davinci--- 8148/8168/8127 中的音频alsa 采集

1.snd_pcm_open,打开句柄. 2.配置参数,可能用到的接口:snd_pcm_hw_params_alloca.snd_pcm_hw_params_any.snd_pcm_hw_params_set_rate_near.snd_pcm_hw_params_set_format.snd_pcm_hw_params_set_access.snd_pcm_hw_params_set_channels.snd_pcm_hw_params_set_period_size_near.snd_pcm

嵌入式开发之cgic库---cgi库的使用

很幸运!用C语言写CGI程序还可以有比较简单的方式,那就是我们可以借助使用第三方库CGIC(CGIC是一个功能比较强大的支持CGI开发的标准C库,并支持Linux, Unix 和Windows等多操作系统)来编写,省去了必须自己去遵循CGI规范来码砖的痛苦,使CGI程序的编写变的简单,下面是我第一次使用CGIC库来写的第一个CGI程序:第一步:从cgic官网(http://www.boutell.com/cgic/ 此网站好像不稳定,偶尔能开)上下载cgic库文件第二步:在Dev-C++中创建一