Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

TCP Echo Client-Server

Başlatan robikod, 28 Ocak 2021, 14:41:47

robikod

Uzun zamandır sorun yaşadığım bir konu var. Uzunca bir araştırma yapıp birçok forumda(yabancı) benzer sorunları gördüm fakat cevap ve çözüm bulamadım belki bu forumda bu konuda uzman bir kişi vardır.

Stm32+ lwip kullanıyorum bunu kullanarak basit bir TCP/IP haberleşmesi yapmak istedim. CubeIde Example'ları içerisinde TCp-echo client uygulamalarını iki farklı cihazıma yükledim.

İlk başlangıçta başarılı bir TCP haberleşmesi kuruluyor. Sonrasında Client olan cihazı resetlediğim ve tekrar başlattığımda;
 tcp_connect(echoclient_pcb,&DestIPaddr,7,tcp_echoclient_connected); bu satıra geldiğinde tcp_echoclient_connected callback'ine gitmiyor. Dolayısı ile tekrar başlattığım zaman TCP haberleşmesi sağlanmıyor. tcp_connect return olarak ERR_OK dönüyor.

Neden Client cihazı tekrar başlattığım zaman Retransmition oluyor bu konuda bilgisi olan var mı ?

Wireshark görüntüsü: https://i.stack.imgur.com/eBfsp.png
(Ok işaretine kadar başarılı ok işaretinden sonra cihazın gücünü kesip terkar verdim haberleşme başarısız)

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