探索者tcp服务器回显实验

2019-07-20 10:44发布

使用例程 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, 下载次数: 72) 2017-11-24 17:21 上传 点击文件名下载附件 网络实验5 RAW_TCP服务器实验 - 副本.rar (1.23 MB, 下载次数: 67) 2017-11-24 17:21 上传 点击文件名下载附件
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
1条回答
hi我歌月徘徊
1楼-- · 2019-07-20 11:31
探索者版本的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的例程代码搞过来

一周热门 更多>