免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1662 | 回复: 2
打印 上一主题 下一主题

[C] UDP 如何响应最新的命令请求? [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-05-11 13:23 |只看该作者 |倒序浏览


做了两个命令: 02 和04
一直定时发其中一个命令,停止时,换发另个命令,发现并不能立即响应,新命令一直到第七次才有响应(前6次,都是上一个命令的返回内容)


如果不加“设接收缓冲区为0”,这两句,持续发一个命令一段时间后,再发新命令,那就要发N次新命令后,才响应新命令(之前都是上一条命令的返回内容)
  1. if (events_udp[n].data.fd == listener)
  2.       {
  3.               new_fd=events_udp[n].data.fd;       
  4.              
  5.               pthread_mutex_lock(mutex);// udp lock               
  6.                           int optudp =0; //设接收缓冲区为0
  7.                           setsockopt(new_fd, SOL_SOCKET, SO_RCVBUF, &optudp, sizeof(optudp));//设接收缓冲区为0
  8.                           ret = recvfrom(new_fd, recvbuf, MAXBUF, 0, (struct sockaddr *)&client_addr, &cli_len);                          
  9.                           if (ret > 0)
  10.                                   {                                    
  11.                                     printf("\n");                                    
  12.                                     printf("revc Data length from PC:%d \n",ret);
  13.                                     for(i=0;i<ret;i++)
  14.                                             printf("%02X ",recvbuf[i]);                                            
  15.                                     printf("\n");       
  16.                                     
  17.                                                 
  18.                                     Receive_Process(ret,recvbuf);//处理命令包函数
  19.                                     pthread_mutex_unlock(mutex);//unlock       
  20.                                         }
  21.                                   else
  22.                                   {
  23.                                     printf("received failed! error code %d ??message : %s \n",errno, strerror(errno));   
  24.                                   }          
  25.                                   fflush(stdout);  
  26.                         }
复制代码

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2015-05-11 13:25 |只看该作者
间隔2ms发一次命令,,开发板,处理一条命令1S多...

上面的代码,不论发多少次命令(假设10W次),当切换新命令后, 新命令的前6次返回的值都是上一条命令的返回值,直到第七次才将正确的返回值传给PC

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2015-05-11 16:07 |只看该作者
尼玛的,最后验证玩了 是开发板内核版本导致的

换了块板子,内核和PC一样,,程序表现的就一样,,6410的内核低一个版本。。。。。。


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

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP