使用例程 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);
测试下 反应很快了,但是数据包中的内容并没有拷贝到自己的接收缓存里面,回显实验虽然没有用到里面的数据,是直接发送的,但是实际用的话肯定是要拷贝的,但是拷贝的话又太慢了,这是个问题。。。 |