简单的 TCP 通信

问题描述

我正在尝试与两个不同的 stm32 设备使用基本的 TCP-IP 通信,其中一个是 TCP 客户端,一个是 TCP 服务器。在wireshark图片上;直到箭头标记客户端和服务器连接成功发送和接收数据,箭头后我重置客户端而不是 ReTransmition 消息显示。我正在使用 stm32 lwip Raw 和简单的 CubeIde tcp-echo 服务器客户端示例。

客户端初始化为 tcp_echoclient_connect,服务器初始化为:tcp_echoserver_init

我的问题是什么,我该如何解决?

enter image description here

/**
  * @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);
  }  

}

我注意到一些事情,当我重新启动客户端设备时 tcp_echoclient_connected 回调没有调用我不知道为什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)