lwip连续发数据卡死_关于LWIP协议栈连续多次tcp_write后失败的解决过程

本文介绍了在STM32F107上使用LWIP协议栈开发C/S架构通信程序时遇到的tcp_write卡死问题。通过调试发现TCP_SND_QUEUELEN限制了发送次数,将其调整后解决了连续发送数据失败的故障。同时提到了tcp_write函数中copy参数的重要性,当为0时需要保证缓冲区内容不变,否则可能导致发送错误数据。
摘要由CSDN通过智能技术生成

前段时间一直在调试lwip协议栈的问题,在stm32F107上实现一个C/S 架构的通信程序。项目初期的时候设计的是B/S架构的控制,然后在使用过程中发现了些限制,因为芯片自身的RAM有限,所以跑B/S的server端略显压力,为了处理类似动态网页内容,开辟一个5K的缓冲区,然后一次tcp_write就可以将内容发送给浏览器了,当然网页内容也是比较简单,考虑到后续可能会有更多的数据处理,故决定开发一个C/S架构的控制。

上位机client倒是没什么太多可说的,自己封装下基本的winsock操作。考虑到用TCP协议传输简单地封装了下数据封包和拆包的协议,然后MFC作为图形界面。在stm32端主要采用lwip的RAW API,然后利用callback的方式处理接收上位机命令、数据后的处理,初始化服务器的代码如下:

void Server_init(void)

{

struct tcp_pcb *pcb;

pcb = tcp_new(); // 动态创建一个pcb

tcp_bind(pcb, IP_ADDR_ANY, 8082);  // 绑定端口8082

pcb = tcp_listen(pcb); // 开始监听

tcp_accept(pcb, Server_accept); // accept成功时的回调函数

}

然后在Server_accept中也主要是初始化一些回调函数,

static err_t Server_accept(void *arg, struct tcp_pcb *pcb, err_t err)

{

tcp_err(pcb, Server_conn_err); // 错误时的回调函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值