挺实用的---测试sendto 的速率--精确microseconds

这几天,做网络摄像机,发过去的图像有时会出现 撕裂的情况,最后用代码测了一下,发现是由于发送的速度太快了 。


  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%





你可能感兴趣的:(timezone,struct,测试,null,buffer,Descriptor)