我试图在两个stm32设备之间做TCP连接。首先,在我们看到的wireshark.When客户端重置和发送新数据之间一切都是完美的,wireshark向我展示了传输TCP消息,但是当我调试服务器端时,服务器端得到消息并在客户端接收回送消息后发送回显消息。
为什么重传信息显示,尽管我得到并发送信息给对方?
完整客户端代码:https://paste.ubuntu.com/p/VJHzgv29FM/
完整服务器代码:https://paste.ubuntu.com/p/Wm9gvkSfF7/

/**
* @brief Initializes the tcp echo server
* @param None
* @retval None
*/
void tcp_echoserver_init(void)
{
/* create new tcp pcb */
tcp_echoserver_pcb = tcp_new();
if (tcp_echoserver_pcb != NULL)
{
err_t err;
/* bind echo_pcb to port 7 (ECHO protocol) */
err = tcp_bind(tcp_echoserver_pcb, IP_ADDR_ANY, 7);
if (err == ERR_OK)
{
/* start tcp listening for echo_pcb */
tcp_echoserver_pcb = tcp_listen(tcp_echoserver_pcb);
/* initialize LwIP tcp_accept callback function */
tcp_accept(tcp_echoserver_pcb, tcp_echoserver_accept);
}
else
{
/* deallocate the pcb */
memp_free(MEMP_TCP_PCB, tcp_echoserver_pcb);
}
}
}客户端:
/**
* @brief Connects to the TCP echo server
* @param None
* @retval None
*/
void tcp_echoclient_connect(void)
{
ip_addr_t DestIPaddr;
/* create new tcp pcb */
echoclient_pcb = tcp_new();
if (echoclient_pcb != NULL)
{
IP4_ADDR(&DestIPaddr, (uint8_t)192, (uint8_t)168, (uint8_t)1, (uint8_t)40);
/* connect to destination address/port */
tcp_connect(echoclient_pcb,&DestIPaddr,7,tcp_echoclient_connected);
}
else
{
SerialPrint("not null");
memp_free(MEMP_TCP_PCB, echoclient_pcb);
} }
发布于 2021-02-01 08:19:56
当使用wireshark分析网络流时,这里有一个来自wireshark的医生,它可以帮助您理解这些单词的含义。
我们可以看到以下情况:
TCP重传
当下列所有内容都为真时设置:
对于您的情况,问题是段长度大于零,或者设置了SYN或FIN标志。这是由您的重置引起的,所以这并不意味着您的TCP连接会导致重传。
https://stackoverflow.com/questions/65939519
复制相似问题