使用例程 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 上传
点击文件名下载附件
tcp_poll(newpcb,tcp_server_poll,1);
最后一个参数为1,表示调用周期为1个内核定时器的处理周期,就是每隔500ms调用一次,所以在 “ 在大循环里面收到数据之后 tcp_server_flag|=1<<7;发送数据 ” 这个是很慢的。。。
处理方法 不在使用标志查询,发送数据不在poll函数中调用,在429的例程中,原子修改了这一点,可以直接把429的例程代码搞过来
一周热门 更多>