嵌入式系统基于UDP发送链表数据的问题

[复制链接]
查看11 | 回复4 | 2021-1-27 07:11:35 | 显示全部楼层 |阅读模式
各位大侠,最近在搞嵌入式系统的网络通信,由于数据量不是很大,准备采用的是UDP协议。以下是代码
#defineserver_port99
externu8SizeOfInfor;
externu8Rx_infor[1500];
externu16NumInfor;
u8SnPbufTimes=2;
/****************************************************
*函数功能:对接收数据的处理函数(数据接受在以太网中断中完成)
****************************************************/
voidrecv_callback_udp(void*arg,structudp_pcb*upcb,structpbuf*pkt_buf,
structip_addr*addr,u16_tport)
{
structip_addrdAddr=*addr;//结构体赋值
u8*pValiData;
u16i,j;
structpbuf*p[10];//定义10个pbuf结构
structip_addripaddr;
structudp_pcb*UDPpcb1;
u32_tIPaddress;
pValiData=(u8*)pkt_buf->payload;//u8*对void指针进行强制转换
IPaddress=addr->addr;//远端IP地址
if(pkt_buf!=NULL)
{
switch(*pValiData)
{
case0x05:
......
break;
case0x0A:
//根据data大小开辟内存,在RAM中
p[0]=pbuf_alloc(PBUF_TRANSPORT,SizeOfInfor*NumInfor,PBUF_RAM);
for(i=0;ipayload+i)=Rx_infor;
//开辟SnPbufTimes个pbuf,为演示方便将所有pbuf中数据都赋值为数组Rx_infor
for(j=1;jpayload+i)=Rx_infor;
p[j-1]->next=p[j];//创建链表
//p[j]->ref+=1;//被引用次数加1,pbuf->ref=1时才能删除pbuf
}
for(j=SnPbufTimes-1;j>0;j--)//计算tot_len
p[j-1]->tot_len=p[j-1]->len+p[j]->tot_len;
IP4_ADDR(&ipaddr,(u8_t)(IPaddress),//192
(u8_t)(IPaddress>>8),//168
(u8_t)(IPaddress>>16),//1
(u8_t)(IPaddress>>24));//2
UDPpcb1=udp_new();
udp_bind(UDPpcb1,IP_ADDR_ANY,server_port);//绑定本地IP地址
udp_connect(UDPpcb1,&ipaddr,port);//连接远端IP
udp_send(UDPpcb1,p[0]);
pbuf_free(p[0]);//将链表中从前往后ref=1的pbuf连续删去
udp_remove(UDPpcb1);//在不需要改pcb通信连接时可以删去,
break;
default:
break;
}
}
pbuf_free(pkt_buf);
}
我使用单片机给上位机传送数据的,但是上位机连一次pbuf的数据也没有接收到。郁闷!!!
分 -->
回复

使用道具 举报

千问 | 2021-1-27 07:11:35 | 显示全部楼层
没人啊
回答一下

回复

使用道具 举报

千问 | 2021-1-27 07:11:35 | 显示全部楼层
没用过嵌入式的UDP,帮顶
回复

使用道具 举报

千问 | 2021-1-27 07:11:35 | 显示全部楼层
udp_sendto(upcb,p,IP_ADDR_BROADCAST,port);直接用这个函数,不要用什么连接过程试一下看。
回复

使用道具 举报

千问 | 2021-1-27 07:11:35 | 显示全部楼层
我用了3楼说的那个,数据也发送出去了,但是程序不断弹出类似于“套接字未连接”那个对话框。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行