服务器 > 网络 > udp

LWIP RAW编程接口 UDP函数详解

127人参与 2024-08-03 udp

一、udp.c 中与 udp 报文处理有关的函数之间的关系 

二、udp 的 raw api 功能函数

        lwip 的 raw api 编程方式是基于回调机制的,当我们初始化应用的时候我们必须为内核中不同的事件注册相应的回调函数,当相应的事件发生的时候这些回调函数就会被调用

 

三、udp代码

myudp.h

#ifndef _myudp_h
#define _myudp_h

void myudpinit(void);

#endif


myudp.c

#include "myudp.h"
#include "lwip/netif.h"
#include "lwip/ip.h"
#include "lwip/tcp.h"
#include "lwip/init.h"
#include "netif/etharp.h"
#include "lwip/udp.h"
#include "lwip/pbuf.h"
#include <stdio.h>
#include <string.h>
/*建立“连接”。注意这里没有真正意义上的连接,没有握手挥手的过程。 只是设置了远端的ip地址和端口,也就是把远端的ip和端口保存到了udp协议控制块中。
使用函数udp_connect建立“连接”。
在udp传输中建立“连接”并不是必须的。建立“连接”只是让远端的ip地址和端口保存到udp协议控制块中。
如果执行了建立“连接”这个过程,那么后续可以使用udp_send函数去发送数据;
如果没有执行建立“连接”这个过程,后续就必须使用udp_sendto函数去发送数据*/

//udp服务器发送数据
void udp_demo_senddata(struct udp_pcb *upcb,char *tcp_demo_sendbuf)
{
	struct pbuf *ptr;
	ptr=pbuf_alloc(pbuf_transport,strlen((char*)tcp_demo_sendbuf),pbuf_pool); //申请内存
	if(ptr)
	{
		pbuf_take(ptr,(char*)tcp_demo_sendbuf,strlen((char*)tcp_demo_sendbuf)); //将tcp_demo_sendbuf中的数据打包进pbuf结构中
		udp_send(upcb,ptr);	//udp发送数据 
		pbuf_free(ptr);//释放内存
	} 
} 
static void udp_demo_recv(void *arg,struct udp_pcb *upcb,struct pbuf *p,struct ip_addr *addr,u16_t port)
{
     struct pbuf *q = null;
     const char* reply = "this is reply!\n";
     pbuf_free(p);

     q = pbuf_alloc(pbuf_transport, strlen(reply)+1, pbuf_ram);
     if (!q)
     {
         printf("out of pbuf_ram\n");
         return;
     }
     memset(q->payload, 0 , q->len);
     memcpy(q->payload, reply, strlen(reply));
     udp_sendto(upcb, q, addr, port);
	// udp_demo_senddata(upcb,"hello");
     pbuf_free(q);
}

void myudpinit(void)
{
	struct udp_pcb *udpecho_pcb;
	struct ip_addr rmtipaddr;  	//远端ip地址
	udpecho_pcb=udp_new();
	if(udpecho_pcb)//创建成功
	{ 
		ip4_addr(&rmtipaddr,192,168,1,104);
		//udp_connect(udpecho_pcb,&rmtipaddr,9999);//udp客户端连接到指定ip地址和端口号的服务器
		udp_bind(udpecho_pcb, ip_addr_any, 9999);/* 绑定端口号 */
		udp_recv(udpecho_pcb, udp_demo_recv, null);/* 注册接收数据回调函数 */
	}
}

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

《计算机网络微课堂》5-3 UDP和TCP的对比

08-03

网络编程套接字(二)之UDP服务器简单实现

08-06

udp接收发送数据程序以及注意事项

08-06

UDP丢包问题解决经验梳理

08-06

nginx安装stream模块配置tcp/udp端口转发

08-06

UDP编程流程(UDP客户端、服务器互发消息流程)

08-01

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论