金牌会员
 
- 积分
- 1342
- 金钱
- 1342
- 注册时间
- 2021-4-28
- 在线时间
- 504 小时
|

楼主 |
发表于 2022-7-31 21:18:41
|
显示全部楼层
void tcp_recv_thread(void *arg)
{
err_t recv_err;
struct pbuf *q;
uint32_t data_len = 0;
OS_CPU_SR cpu_sr; /* 定义一开关中断变量 */
LWIP_UNUSED_ARG(arg); /* 防止报错 */
while(1)
{
if ((g_tcp_server_flag & TCP_SERVER_EN_FLAG) == TCP_SERVER_EN_FLAG)
{
struct netbuf *recvbuf;
/* 接收端 */
if ((recv_err = netconn_recv(clientaddr.conn[1],&recvbuf)) == ERR_OK) /* 接收数据不为空 */
{
OS_ENTER_CRITICAL(); /* 进入临界区 */
memset(tcp_server_recvbuf,0,TCP_SERVER_RX_BUFSIZE); /* 接收缓冲区清零 */
for(q = recvbuf->p;q != NULL;q = q->next) /* 遍寻下一个pbuf */
{
if (q ->len > (TCP_SERVER_RX_BUFSIZE - data_len))
{
memcpy(tcp_server_recvbuf + data_len,q ->payload,(TCP_SERVER_RX_BUFSIZE - data_len));
}
else
{
memcpy(tcp_server_recvbuf + data_len,q ->payload,q ->len);
}
data_len += q->len;
if (data_len > TCP_SERVER_RX_BUFSIZE) /* 超过TCP接收数组 */
{
break; /* 跳出 */
}
}
OS_EXIT_CRITICAL(); /* 退出临界区 */
data_len = 0;
printf("%s\r\n",tcp_server_recvbuf);
netbuf_delete(recvbuf);
}
else if (recv_err == ERR_CLSD)
{
netconn_close(clientaddr.conn[1]);
netconn_delete(clientaddr.conn[1]);
printf("客户端主机:%d.%d.%d.%d断开连接\r\n",lwipdev.remoteip[0],lwipdev.remoteip[1], lwipdev.remoteip[2],lwipdev.remoteip[3]);
break;
}
}
OSTimeDlyHMSM(0,0,0,200);
}
} |
|