lwip可以用于发udp_lwip协议中udp包的接收与发送

lwip协议中为什么我udp能发包却接收不到包

void  UDPDataRecv(void *arg, struct udp_PCB *upcb, struct pbuf *p,

struct ip_addr *addr, u16_t port)

{

// char *a;

// uint8_t i=0;

struct pbuf *q;

struct ip_addr destAddr = *addr;

if(p != NULL)                          /* 如果收到的数据不为空   */

{

for(q=p; q != NULL; q = p->next)

{

//   c = q->payload;

//  a=q->payload;

//pbuf_copy_partial(p, UDPData, p->len, 0);

udp_sendto(upcb,q->payload,&destAddr,5000);                    /* 将收到的数据再发送出去 */

}                  /* 释放缓冲区数据 */

}

//pbuf_free(p);

}

//}

void UDPNetInit(void)

{

struct udp_pcb * UDPpcb;

struct ip_addr ipaddr1;

struct ip_addr netmask;

struct ip_addr gw;

IP4

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
lwip,struct udp_pcb是一个表示UDP协议控制块(PCB)的结构体,它含了UDP协议相关的各种参数和回调函数。UDP PCB结构体是实现UDP协议功能的重要组成部分,它用于维护UDP连接的各种状态信息和控制参数,如本地和远程IP地址、端口号、收缓存等。在网络协议UDP PCB结构体被广泛应用于UDP数据收和处理的过程,是实现UDP协议功能的重要组成部分。 struct udp_pcb的定义如下: ```c struct udp_pcb { /* 协议控制块的链表指针 */ struct udp_pcb *next; /* 当前协议控制块的本地IP地址和端口号 */ ip_addr_t local_ip; u16_t local_port; /* 当前协议控制块的远程IP地址和端口号 */ ip_addr_t remote_ip; u16_t remote_port; /* 收数据缓存 */ struct pbuf *recv_buf; struct pbuf *send_buf; /* 回调函数 */ udp_recv_fn recv; void *recv_arg; }; ``` 其,next字段用于指向下一个UDP PCB结构体的指针,local_ip和local_port字段用于表示当前UDP PCB的本地IP地址和端口号,remote_ip和remote_port字段用于表示当前UDP PCB的远程IP地址和端口号,recv_buf和send_buf字段用于表示当前UDP PCB的收数据缓存,recv和recv_arg字段用于表示当前UDP PCB的数据接收回调函数和回调函数参数。 在使用struct udp_pcb时,需要注意以下几点: 1. struct udp_pcb是一个链表结构,需要使用next指针遍历整个链表; 2. local_ip、local_port、remote_ip和remote_port字段需要在UDP连接建立时进行初始化,可以使用udp_new函数创建新的UDP PCB; 3. recv_buf和send_buf字段用于表示当前UDP PCB的收数据缓存,需要在数据收过程进行操作; 4. recv和recv_arg字段用于表示当前UDP PCB的数据接收回调函数和回调函数参数,可以在数据接收回调函数进行数据处理和应答发送

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值