LWIP更改客户端

问题描述

我借助lwip库在STM32F746发现板上创建了一个TCP / IP服务器。它与一个客户端(一个端口,一个IP)配合使用时效果很好,但是在更改客户端(更改IP和端口)时,服务器无法连接到新客户端。这是我的代码

extern struct netif gnetif;
extern ip4_addr_t netmask;
extern ip4_addr_t gw;

char tcp_rx_buf[64];

struct tcp_pcb *tcp_controller;


/*
 * @parameter : TCP communication protocol controller struct.
 * @retval    : none.
 * @brief     : This function closes TCP connection. All motorized systems is closed in respect.
 */

 static void TCP_Close_Connection(struct tcp_pcb *pcb)
 {
      tcp_arg(pcb,NULL);
      tcp_sent(pcb,NULL);
      tcp_recv(pcb,NULL);
      tcp_close(pcb);
 }

 /*
  * @parameter1 : Unused argument.
  * @parameter2 : TCP communication protocol controller struct.
  * @parameter3 : TCP buffer control struct.
  * @parameter4 : Error state checking struct.
  * @retval     : Function error state returnig value.
  * @brief      : This function Recieves data via TCP/IP protocol and copies into global buffer.
  * */

   static err_t TCP_Recv(void *arg,struct tcp_pcb *pcb,struct pbuf *p,err_t err)
   {

   LWIP_UNUSED_ARG(arg);
   uint32_t len;
   char *pc;

   if ( (err == ERR_OK) && (p != NULL) )
   {

        tcp_recved(pcb,p->tot_len);

        pc=(char *)p->payload;

        len =p->tot_len;

        memcpy(tcp_rx_buf,pc,len);

        pbuf_free(p);

        if ( len > tcp_sndbuf(pcb) )
        {
            len = tcp_sndbuf(pcb);
        }
  }
  else
  {
        pbuf_free(p);
  }

  if ( (err == ERR_OK) && (p == NULL) )
  {
        TCP_Close_Connection(pcb);
  }

  return ERR_OK;
  }

  /*
   * @parameter1 : Unused argument.
   * @parameter2 : TCP communication protocol controller struct.
   * @parameter3 : Error state checking struct.
   * @retval     : Function error state returnig value.
   * @brief      : This function accepts requests from TCP clients.
   */

   static err_t TCP_Accept(void *arg,err_t err)
   {
      LWIP_UNUSED_ARG(arg);
      LWIP_UNUSED_ARG(err);

  tcp_setprio(pcb,TCP_PRIO_MIN);
  tcp_recv(pcb,TCP_Recv);
  tcp_err(pcb,NULL);
  tcp_poll(pcb,NULL,4);

  return ERR_OK;
  }

  /*
   * WARNING : THESE FUNCTIONS WILL BE MODIFIED IN FUTURE.
   */

   void TCP_Server_Init()
   {
      tcp_controller = tcp_new();
      tcp_bind(tcp_controller,IP_ADDR_ANY,80);
   }

   void TCP_Server_Runtime_Task()
   {
     tcp_controller = tcp_listen(tcp_controller);
     tcp_accept(tcp_controller,TCP_Accept);
   }

   void TCP_Server_Change_Client(const ip_addr_t *ipaddr,u16_t port)
   {
      tcp_controller = tcp_new();
      tcp_bind(tcp_controller,ipaddr,port);
   }

您建议进行哪种修改

解决方法

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

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

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