uip udp遇到的问题,求助开发过udp的朋友。

2019-10-16 07:18发布



电脑端ip:192.168.17.182 port:8080
设备端ip:192.168.17.198 port:1800

我要使用stm32战舰板做一个设备,功能需求描述如下:设备使用UDP与电脑连接,电脑通过固定端口8080,主动发任意数据给设备的1800端口。设备使用固定端口1800把数据原样返回给电脑的8080端口。

经过移植测试,发现没有达到设计要求。测试界面如图所示。电脑使用8080端口给设备发信息,设备的1800端口能正常接收到,但是设备不使用1800端口给电脑回信息,而是随机分配一个新的端口,这个在下面程序中我会说明原因。经过10次通讯后,设备没有新的udp连接可以建立(因为UDP连接最多只有10个),通讯也就中断了。请高手帮我如何才能让设备只通过一个UDP连接进行通讯,也就是只是用1800端口进行收和发?
main函数中的初始化代码:
  uip_ipaddr(ipaddr, 192,168,17,198); //设备IP uip_sethostaddr(ipaddr);     uip_ipaddr(ipaddr, 192,168,17,254); //网管 uip_setdraddr(ipaddr);   uip_ipaddr(ipaddr, 255,255,255,0); //子网掩码 uip_setnetmask(ipaddr);

uip_udp_bind(&uip_udp_conns[0],HTONS(1800));//创建一个udp连接在uip_udp_conns【0】位置,绑定端口1800,随时监听电脑发来的数据。

//UDP服务回调函数(UIP_UDP_APPCALL)
void udp_demo_appcall(void) { switch(uip_udp_conn->lport)        //检查发来的数据包的端口。 { case HTONS(1800): udp_phone_appcall(); //调用1800端口的数据回调函数。 break; default:      break; }
} void udp_phone_appcall(void) { uip_ipaddr_t ipaddr; if(uip_newdata())        //有新数据 { strcpy((char*)udp_server_databuf,uip_appdata);//将udp数据部分拷贝到我的数组udp_server_databuf【】 udp_server_sta|=1<<6;//有新数据标志
ipaddr[0] = UDPBUF->srcipaddr[0];//将我的电脑的IP地址保存起来。 ipaddr[1] = UDPBUF->srcipaddr[1];

uip_udp_conn = uip_udp_new(&ipaddr,UDPBUF->srcport);//建立一个到我的电脑的连接,端口是我的电脑发送时使用的端口。这里设备会自动给自己分配一个端口,用来发数据。而不是我要求的固定的1800端口。
uip_udp_send(uip_len);
} }


同志们,朋友们,问题该怎么解决啊?在线等你们回复啊。





友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
iamlight_ren
1楼-- · 2019-10-16 11:13




我的帖子不能沉下来啊。我这样修改了一下,虽然不能达到最终要求,还算有了进步。
在主函数中限定目标地址和端口在一个连接uip_udp_conns[0]中。

uip_udp_bind(&uip_udp_conns[0],HTONS(1800));//°ó?¨UDP??????
uip_udp_conns[0].rport = HTONS(8080);//目标端口
uip_ipaddr(ipaddr, 192,168,17,182); //目标IP
uip_ipaddr_copy(uip_udp_conns[0].ripaddr, ipaddr);
回调函数中不再建立新的连接。直接发送收到的数据。
void udp_phone_appcall(void)
{
uip_ipaddr_t ipaddr;
if(uip_newdata())
{
strcpy((char*)udp_server_databuf,uip_appdata);
udp_server_sta|=1<<6;//±í?????????§??????

//  ipaddr[0] = UDPBUF->srcipaddr[0];
//  ipaddr[1] = UDPBUF->srcipaddr[1];


//  uip_udp_conn = uip_udp_new(&ipaddr,UDPBUF->srcport);

uip_udp_send(uip_len);

}

}

求高手关注。指点。
iamlight_ren
2楼-- · 2019-10-16 12:12
又沉了,我顶。
正点原子
3楼-- · 2019-10-16 13:41
帮顶
1375917982gxut
4楼-- · 2019-10-16 15:34
力顶,同事希望版主 分享代码,一起进步
417151498
5楼-- · 2019-10-16 19:31
 精彩回答 2  元偷偷看……

一周热门 更多>