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);
} }


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





友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。