LWIP下UDP传输

2019-07-14 09:32发布

LWIP下UDP传输

通过回调函数来实现UDP传输。
思路就是基本的UDP传输方法。
下面结合代码具体说步骤:
①通过udp_new()生成一个初始的udp_pcb;
②通过udp_bind()绑定pcb,ip,port;
③注册接收回调函数 udp_recv(pcb,callback,NULL);
④在回调函数中处理解析…;
⑤发送函数udp_sendto(pcb,pbuf,to_ip,to_port);
⑥使用完后注意释放free(pbuf); err_t udp_send_message(struct udp_pcb *pcb, struct ip_addr *to_ip, int to_port, char *buf, int buflen) { err_t err; struct pbuf *p; /* form a pbuf */ p = pbuf_alloc(PBUF_TRANSPORT, buflen, PBUF_POOL); if (!p) { return ERR_MEM; } memcpy(p->payload, buf, buflen); /* send message */ err = udp_sendto(pcb, p, to_ip, to_port); /* free pbuf */ pbuf_free(p); return err; } void udp_recv_callback(void *arg, struct udp_pcb *upcb,struct pbuf *p, struct ip_addr *_addr, u16_t port) { memcpy(temp,p->payload,p->len); udp_send_message(upcb, _addr, port,str, len); pbuf_free(p); } int udp_test_recv(void) { struct udp_pcb *pcb; err_t err; unsigned port = udp_port; /* create new UDP PCB structure */ pcb = udp_new(); if (!pcb) { return -1; } /* bind to @port */ err = udp_bind(pcb, IP_ADDR_ANY, port); if (err != ERR_OK) { return -2; } udp_recv(pcb, udp_recv_callback, NULL); return 0; }

总结

原来在lwip下传输方法与高级语言中的网络传输方式并无太大区别,在以后的学习中要注意对网络进行分层学习,这样能比较清晰直观。