Red de conocimiento informático - Problemas con los teléfonos móviles - Cómo cargar archivos usando el protocolo TFTP en la pila de protocolos LWIP en STM32F4

Cómo cargar archivos usando el protocolo TFTP en la pila de protocolos LWIP en STM32F4

Paso 1: utilice err_t tftp_send_message(struct udp_pcb *upcb, struct ip_addr *to_ip, int to_port, char *buf, int buflen) en tftpserver para enviar una solicitud de escritura de archivo a la dirección especificada. Paso 2: Utilice la función void Process_tftp_request(struct pbuf *pkt_buf, struct ip_addr *addr, u16_t port) en tftpserver para procesar la respuesta. c. Si se recibe una respuesta, la función de solicitud Process_tftp_ en la función int tftp_process_write(struct udp_pcb *upcb, struct ip_addr *to, int to_port, char *FileName) enviará el archivo de datos.

El proceso básico es el anterior, pero el parámetro struct udp_pcb *upcb en la función tftp_send_message() tiene una estructura de datos muy compleja

struct udp_pcb {

/* Miembros comunes para todos los tipos de PCB */

IP_PCB;

/* Miembros de PCB específicos del protocolo */

struct udp_pcb *next;

u8_t flags;

/* Los puertos están organizados en orden de bytes del host*/

u16_t puerto_local, puerto_remoto;

#if LWIP_IGMP

/* Interfaz de red saliente para paquetes multicast */

struct ip_addr multicast_ip;

#endif /* LWIP_IGMP */

#if LWIP_UDPLITE

/* Sólo para UDP_LITE */

u16_t chksum_len_rx, chksum_len_tx;

#endif /* LWIP_UDPLITE */

/* Recibir devolución de llamada function

* El orden de bytes de addr y puerto es el mismo que en pcb

* Si ya no se usa pbuf, la función de devolución de llamada es responsable de liberarlo

*.

*

* Nota: 'addr' apunta a pbuf 'p', por lo que liberar ese pbuf

* también invalidará 'addr'.

*

* @param arg Parámetros proporcionados por el usuario (udp_pcb.recv_arg)

* @param pcb udp_pcb que recibe datos

* @param p El buffer del paquete recibido

* @param addr La dirección IP remota del paquete recibido

* @param port El puerto remoto del paquete recibido

p >

*/

void (* recv)(void *arg, struct udp_pcb *pcb, struct pbuf *p,

struct ip_addr *addr, u16_t port); /p>

/* Parámetros proporcionados por el usuario para la devolución de llamada de recv*/

void *recv_arg

};