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;
p = pbuf_alloc(PBUF_TRANSPORT, buflen, PBUF_POOL);
if (!p) {
return ERR_MEM;
}
memcpy(p->payload, buf, buflen);
err = udp_sendto(pcb, p, to_ip, to_port);
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;
pcb = udp_new();
if (!pcb) {
return -1;
}
err = udp_bind(pcb, IP_ADDR_ANY, port);
if (err != ERR_OK) {
return -2;
}
udp_recv(pcb, udp_recv_callback, NULL);
return 0;
}
总结
原来在lwip下传输方法与高级语言中的网络传输方式并无太大区别,在以后的学习中要注意对网络进行分层学习,这样能比较清晰直观。