这几天,做网络摄像机,发过去的图像有时会出现 撕裂的情况,最后用代码测了一下,发现是由于发送的速度太快了 。
struct timeval tv;
struct timezone tz; //时区信息
//gettimeofday(&tv ,&tz); //gettimeofday(struct timeval * ,struct timezone *)算时间,第儿个参数可以置NULL
gettimeofday(&tv ,NULL);
double time_start =tv.tv_sec * 1000000 + tv.tv_usec;
for(loop_num = 0 ;loop_num < 100 ;loop_num ++)
{
buffer_send = pic_info + loop_num * 12 * 1024 ;
if(sendto(socket_descriptor,
buffer_send, 1024 * 12/*sizeof(pic_info)*/,
0, (struct sockaddr *)&address, sizeof(address)) == -1)
{
perror("Error :send to ");
}
usleep(1000);
} //循环结束我发送 12KB 的数据
gettimeofday(&tv ,&tz);
double time_end =tv.tv_sec * 1000000 + tv.tv_usec; //单位是 微妙
double difftime = (time_end - time_start)/1000000;
printf("---difftime =%f (s) ,and Transmission speed = %f(MB/S)/n" , difftime, 1200 / 1024 /difftime);
结果:---difftime =0.114626 (s) ,and Transmission speed = 8.724024(MB/S)
---
之前没有加上延时,会达到好几十 ,这样造成了数据的丢失。。。
局域网一般连接的标准是10Mbps和100Mbps,这要看集线设备和机器网卡的标准,一般是就低原则,以最低的连接速率作为标准。
传输数据的速率分别是1.25M/S和12.5M/S现在的网卡一般都是10M/100M自适应的,除非你的网卡很老,或是特殊的。然后还要看你的传输介质怎么样,是不是正常,如果过长,
就会出现衰减,那速度就会受到影响,且会出现丢包的现象了。
我们实际应用中,考虑到其他的因素,一般不能按其最大来传输,一般是按照它最大值的 50% --80%
!