基于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
相关产品推荐
相关产品推荐

