OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3292|回复: 1

探索者tcp服务器回显实验

[复制链接]

42

主题

297

帖子

0

精华

高级会员

Rank: 4

积分
994
金钱
994
注册时间
2016-7-22
在线时间
318 小时
发表于 2017-11-24 17:22:06 | 显示全部楼层 |阅读模式
使用例程 tcp服务器,简单修改代码,作为回显服务器使用,也就是发啥数据回啥数据,长时间测试下是否稳定
1.raw api都是采用回调函数来实现的,可以看到在tcp_server_accept函数中,注册了发送接收的回调函数,直接修改发送函数tcp_server_poll,如果有数据要发送
                        es->p=pbuf_alloc(PBUF_TRANSPORT,tcp_recv_num,PBUF_POOL);
                        pbuf_take(es->p,(char*)tcp_server_recvbuf,tcp_recv_num);

2.改为接收缓冲区tcp_server_recvbuf,长度为tcp_recv_num,这个需要自己定义下,然后在tcp_server_recv函数中,for(q=p;q!=NULL;q=q->next)  遍历整个链表之前保存一下当前数据包的大小tcp_recv_num=p->tot_len;
3.在大循环里面收到数据之后 tcp_server_flag|=1<<7;发送数据  
  测试下,数据丢的我想哭。。。反应太慢了

再修改下 直接吧接收函数中的数据拷贝全屏蔽,直接发送这个pbuf
tcp_recved(tpcb, p->tot_len);
      tcp_write(tpcb, p->payload, p->len, 1);
      pbuf_free(p);

测试下 反应很快了,但是数据包中的内容并没有拷贝到自己的接收缓存里面,回显实验虽然没有用到里面的数据,是直接发送的,但是实际用的话肯定是要拷贝的,但是拷贝的话又太慢了,这是个问题。。。
网络实验5 RAW_TCP服务器实验.rar (1.23 MB, 下载次数: 74)
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

42

主题

297

帖子

0

精华

高级会员

Rank: 4

积分
994
金钱
994
注册时间
2016-7-22
在线时间
318 小时
 楼主| 发表于 2017-11-30 09:45:05 | 显示全部楼层
探索者版本的lwip例程,发送数据包的时候都是把tcp_server_flag|=1<<7,通过lwip内核调用tcp_poll函数,查询到有数据要发送,才会调用send函数,时间耽误在poll函数上,在为lwip内核注册poll函数的时候,是这么写的
tcp_poll(newpcb,tcp_server_poll,1);
最后一个参数为1,表示调用周期为1个内核定时器的处理周期,就是每隔500ms调用一次,所以在 “ 在大循环里面收到数据之后 tcp_server_flag|=1<<7;发送数据   ” 这个是很慢的。。。
处理方法  不在使用标志查询,发送数据不在poll函数中调用,在429的例程中,原子修改了这一点,可以直接把429的例程代码搞过来
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 17:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表