18 Ekim 2021, 07:58:18

Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME


TCP Echo Client-Server

Başlatan robikod, 28 Ocak 2021, 17: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_pcbIP_ADDR_ANY7);

    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_pcbtcp_echoserver_accept);
    }
    else
    {
      
/* deallocate the pcb */
      
memp_free(MEMP_TCP_PCBtcp_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_PCBechoclient_pcb);
  }  


Yasal Uyarı: Picproje.org sitemizde 5651 sayılı kanunun 8. maddesine ve T.C.Knın 125. maddesine göre tüm üyelerimiz yaptıkları paylaşımlardan kendileri sorumludur. Picproje.org hakkında yapılacak tüm hukuksal şikayetleri İletişim sayfamızdan bize bildirdikten en geç 3 (üç) iş günü içerisinde ilgili kanunlar ve yönetmelikler çerçevesinde tarafımızca incelenerek gereken işlemler yapılacak ve site yöneticilerimiz tarafından bilgi verilecektir.