You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于LwIP的TCP Server未响应客户端[FIN,ACK]报文问题排查

TCP服务器无法响应客户端断开请求问题

问题现象

  • 基于STM32-nucleo-144搭建LwIP TCP服务器,TCP三次握手正常完成,客户端发送消息后服务器可正常响应
  • 客户端发起断开连接时,发送带[FIN,ACK]标志的报文,服务器始终未回复[FIN,ACK];使用Hercules工具点击“断开连接”后,工具显示连接已关闭,但Wireshark抓包显示客户端在重复重传FIN,ACK报文,服务器无任何响应
  • 使用循环测试工具(流程:建立连接→发送报文→接收响应→关闭连接,循环执行),首次连接收发正常,但断开时服务器无响应,后续无法继续建立新连接
  • 断开操作开始后,服务器立即变得Ping不可达

服务器代码

初始化代码

/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_LWIP_Init();
/* USER CODE BEGIN 2 */

IP_ADDR4(&myIPADDR,192,168,33,2);
IP_ADDR4(&destip,192,168,33,101);

tcp_pcb = tcp_new();

err_t err = tcp_bind(tcp_pcb, &myIPADDR, 4100);

if(err == ERR_OK)
{
    tcp_pcb = tcp_listen_with_backlog(tcp_pcb, 2);
    tcp_accept(tcp_pcb, tcp_echoserver_accept);
}

/* USER CODE END 2 */

/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
    ethernetif_input(&gnetif);
    sys_check_timeouts();
}
/* USER CODE END 3 */
}

回调函数代码

err_t tcp_echoserver_accept(void *arg, struct tcp_pcb *newpcb, err_t err)
{
    tcp_arg(newpcb, newpcb); // 原代码中`tcp_newpcb`为笔误,应改为`newpcb`
    tcp_recv(newpcb, recv_callback);
    return ERR_OK;
}

err_t recv_callback(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err)
{
    sprintf(data, "this is the message: '%s'", p->payload);

    tcp_recved(tpcb, p->len);
    tcp_write(tpcb, data,p->len+23, 0x02);

    pbuf_free(p);

    err = ERR_OK;
    return err;
}

Wireshark抓包内容(Hercules点击断开后)

13366   6286.571000 192.168.33.101  192.168.33.2    TCP 54  52649 → 4100 [FIN, ACK] Seq=12 Ack=35 Win=65358 Len=0

13367   6286.883778 192.168.33.101  192.168.33.2    TCP 54  [TCP Retransmission] 52649 → 4100 [FIN, ACK] Seq=12 Ack=35 Win=65358 Len=0

13369   6287.498291 192.168.33.101  192.168.33.2    TCP 54  [TCP Retransmission] 52649 → 4100 [FIN, ACK] Seq=12 Ack=35 Win=65358 Len=0

13371   6288.709492 192.168.33.101  192.168.33.2    TCP 54  [TCP Retransmission] 52649 → 4100 [FIN, ACK] Seq=12 Ack=35 Win=65358 Len=0

13374   6291.112720 192.168.33.101  192.168.33.2    TCP 54  [TCP Retransmission] 52649 → 4100 [FIN, ACK] Seq=12 Ack=35 Win=65358 Len=0

内容的提问来源于stack exchange,提问作者confusedfresher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 23:24:57