失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > lwip的tcp断线重连例程_STM32F107+LWIP---如何检查tcp通讯断开?并重新连接

lwip的tcp断线重连例程_STM32F107+LWIP---如何检查tcp通讯断开?并重新连接

时间:2021-11-28 05:12:12

相关推荐

lwip的tcp断线重连例程_STM32F107+LWIP---如何检查tcp通讯断开?并重新连接

void LwIP_Init(void)

{

struct ip_addr ipaddr; //IP地址

struct ip_addr netmask; //子掩码

struct ip_addr gw; //网关地址

uint8_t macaddress[6]={0,0,0,0,0,1};//以太网控制器物理地址,即MAC地址

/* Initializes the dynamic memory heap defined by MEM_SIZE.*/

mem_init();

/* Initializes the memory pools defined by MEMP_NUM_x.*/

memp_init();

#if LWIP_DHCP

ipaddr.addr = 0;

netmask.addr = 0;

gw.addr = 0;

#else

IP4_ADDR(&ipaddr, 192, 168, 1, 200);

IP4_ADDR(&netmask, 255, 255, 255, 0);

IP4_ADDR(&gw, 192, 168, 1, 1);

#endif

Set_MAC_Address(macaddress);

/* - netif_add(struct netif *netif, struct ip_addr *ipaddr,

struct ip_addr *netmask, struct ip_addr *gw,

void *state, err_t (* init)(struct netif *netif),

err_t (* input)(struct pbuf *p, struct netif *netif))

Adds your network interface to the netif_list. Allocate a struct

netif and pass a pointer to this structure as the first argument.

Give pointers to cleared ip_addr structures when using DHCP,

or fill them with sane numbers otherwise. The state pointer may be NULL.

The init function pointer must point to a initialization function for

your ethernet netif interface. The following code illustrates it's use.*/

netif_add(&netif, &ipaddr, &netmask, &gw, NULL, &ethernetif_init, &ethernet_input);

/*Registers the default network interface.*/

netif_set_default(&netif);

#if LWIP_DHCP

/*Creates a new DHCP client for this interface on the first call.

Note: you must call dhcp_fine_tmr() and dhcp_coarse_tmr() at

the predefined regular intervals after starting the client.

You can peek in the netif->dhcp struct for the actual DHCP status.*/

dhcp_start(&netif);

#endif

/*When the netif is fully configured this function must be called.*/

netif_set_up(&netif);

tcp_client_init();

}

/**

* @briefCalled when a frame is received

* @paramNone

* @retval None

*/

void LwIP_Pkt_Handle(void)

{

/* Read a received packet from the Ethernet buffers and send it to the lwIP for handling */

ethernetif_input(&netif);

}

/**

* @briefLwIP periodic tasks

* @paramlocaltime the current LocalTime value

* @retval None

*/

void LwIP_Periodic_Handle(__IO uint32_t localtime)

{

/* TCP periodic process every 250 ms */

if (localtime - TCPTimer >= TCP_TMR_INTERVAL)

{

TCPTimer =localtime;

tcp_tmr();

}

/* ARP periodic process every 5s */

if (localtime - ARPTimer >= ARP_TMR_INTERVAL)

{

ARPTimer =localtime;

etharp_tmr();

}

#if LWIP_DHCP

/* Fine DHCP periodic process every 500ms */

if (localtime - DHCPfineTimer >= DHCP_FINE_TIMER_MSECS)

{

DHCPfineTimer =localtime;

dhcp_fine_tmr();

}

/* DHCP Coarse periodic process every 60s */

if (localtime - DHCPcoarseTimer >= DHCP_COARSE_TIMER_MSECS)

{

DHCPcoarseTimer =localtime;

dhcp_coarse_tmr();

}

#endif

}

/**

* @briefLCD & LEDs periodic handling

* @paramlocaltime: the current LocalTime value

* @retval None

*/

void Display_Periodic_Handle(__IO uint32_t localtime)

{

/* 250 ms */

if (localtime - DisplayTimer >= LCD_TIMER_MSECS)

{

DisplayTimer = localtime;

#if LWIP_DHCP

/* We have got a new IP address so update the display */

if (IPaddress != netif.ip_addr.addr)

{

/* Read the new IP address */

IPaddress = netif.ip_addr.addr;

/* Display the new IP address */

if (netif.flags & NETIF_FLAG_DHCP)

{

tcp_client_init();

}

}

else if (IPaddress == 0)

{

/* If no response from a DHCP server for MAX_DHCP_TRIES times */

/* stop the dhcp client and set a static IP address */

if (netif.dhcp->tries > MAX_DHCP_TRIES)

{

struct ip_addr ipaddr;

struct ip_addr netmask;

struct ip_addr gw;

dhcp_stop(&netif);

IP4_ADDR(&ipaddr, 192, 168, 1, 8);

IP4_ADDR(&netmask, 255, 255, 255, 201);

IP4_ADDR(&gw, 192, 168, 1, 1);

netif_set_addr(&netif, &ipaddr , &netmask, &gw);

}

}

#endif

}

}

如果觉得《lwip的tcp断线重连例程_STM32F107+LWIP---如何检查tcp通讯断开?并重新连接》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。