stm32f107vct6 同时使用TCP udp广播出现断网的问题
各位大神好,我是stm32初学者,目前我代码运行的有TCP的客户端和client,另外我又加入了udp广播,结果发现当我发送udp广播后,板子就ping不通了,tcp服务端也连不上,但是广播数据还是在发送,我的udp广播代码如下
void UDP_Broadcast_Send_IP(void)
{
struct netbuf *buf_send;
unsigned short payload_len=0;
unsigned char *index=NULL;
unsigned char send_buff,pos=0;
struct netconn *bc_clientconn;
err_t ret=0;
bc_clientconn = netconn_new(NETCONN_UDP);
if(bc_clientconn==NULL)
return;
ret=netconn_bind(bc_clientconn,IP_ADDR_ANY,11008);
/* Prepare data */
buf_send = netbuf_new();
send_buff=0xFE;
send_buff=0xEF;
#if LWIP_DHCP//Åжϵ±Ç°ÊÇ·ñΪ×Ô¶¯»ñÈ¡IP
send_buff=0;
#else
send_buff=1;
#endif
//IPµØÖ·
send_buff=(unsigned char)(DP83848_netif.ip_addr.addr);
send_buff=(unsigned char)(DP83848_netif.ip_addr.addr>>8);
send_buff=(unsigned char)(DP83848_netif.ip_addr.addr>>16);
send_buff=(unsigned char)(DP83848_netif.ip_addr.addr>>24);
//MAC
send_buff=MACaddr;
send_buff=MACaddr;
send_buff=MACaddr;
send_buff=MACaddr;
send_buff=MACaddr;
send_buff=MACaddr;
//Íø¹Ø
send_buff=(unsigned char)(DP83848_netif.gw.addr);
send_buff=(unsigned char)(DP83848_netif.gw.addr>>8);
send_buff=(unsigned char)(DP83848_netif.gw.addr>>16);
send_buff=(unsigned char)(DP83848_netif.gw.addr>>24);
//×ÓÍøÑÚÂë
send_buff=(unsigned char)(DP83848_netif.netmask.addr);
send_buff=(unsigned char)(DP83848_netif.netmask.addr>>8);
send_buff=(unsigned char)(DP83848_netif.netmask.addr>>16);
send_buff=(unsigned char)(DP83848_netif.netmask.addr>>24);
send_buff=0xEF;
send_buff=0xFE;
payload_len = pos;
index = netbuf_alloc(buf_send, payload_len);
memcpy (index,send_buff,payload_len);
ret=netconn_sendto(bc_clientconn ,buf_send,IP_ADDR_BROADCAST,11009);//·¢ËÍÊý¾Ý
netbuf_delete(buf_send);
buf_send=NULL;
netconn_delete(bc_clientconn); //ɾ³ýÁ¬½Ó
}
我做了测试,当我屏蔽 ret=netconn_sendto(bc_clientconn ,buf_send,IP_ADDR_BROADCAST,11009); 发送这句,就不会断网,ping一直能通
求各位大神帮忙看一下,TCP、udp能同时用吗在stm32上?有没有什么特殊需要设置的地方,小弟新人,求各位大神指教!!!
我做了个测试,我将TCP关闭,只开udp,组播,广播都试了,只要调用 netconn_sendto()这个 就断网了,ping不通,但是组播包还能发出去 如果同时用tcp和udp端口是不能复用的。 你下边说关闭了TCP之后只用udp、组播也断网,你说的断网时只是网络断了还是死机了呢?只看代码的话建议你把66行和67行的操作放在判断ret返回值里边释放缓冲区和指针。通常来说套接字可以设置为阻塞和非阻塞,如果你的套接字是非阻塞的话发送函数不等数据发送完就返回了缓冲区和指针释放的话就出问题了。如果不行的话再继续找问题。 估计你发送UDP的数据量比较大吧,都被UDP占用了。
试试分时操作,比如:
做个计数器,为0时,执行 TCP,然后+1
为1时,执行UDP,然后+1
为2时,执行其它,
如此累推,当读数器到最后一组操作后,
读数器清零,重新读数。
这样,就不会阻塞了。
页:
[1]