本人在使用ESP32做UDP通讯时,不知道怎么发送广播包,请问应该如何发送广播包呢。如下代码,UDP client通信,当ip地址为192.168.1.220时,能够发送出去,但换成
clieAddrUDP.sin_addr.s_addr = inet_addr("255.255.255.255");时,无法成功发送。表现为函数直行发送成功,但使用抓包工具无法抓到该数据包,请问一下该如何操作,有没有相关例程呢?
#define SERVER_PORT 10001
#define MAX_BUF_SIZE 1024
sta
tic socklen_t len=0;
void UdpClientTask(void *p_arg)
{
int rtnValue;
int clifdUDP;
struct sockaddr_in clieAddrUDP;
char buffer[MAX_BUF_SIZE]="udp client testrn";
clifdUDP = socket(AF_INET,SOCK_DGRAM,0);
if( clifdUDP<0 ){
printf("udp client errrn");
}else{
printf("udp client okrn");
}
/* 填充服务端的资料 */
clieAddrUDP.sin_family=AF_INET;
clieAddrUDP.sin_port=htons(SERVER_PORT);
//clieAddrUDP.sin_addr.s_addr = htonl(IPADDR_BROADCAST);
//clieAddrUDP.sin_addr.s_addr = inet_addr("255.255.255.255");
clieAddrUDP.sin_addr.s_addr = inet_addr("192.168.1.220");
//clieAddrUDP.sin_addr.s_addr = inet_addr("192.168.1.70");
memset(&(clieAddrUDP.sin_zero), 0, sizeof(clieAddrUDP.sin_zero));
len = sizeof(clieAddrUDP);
while(1){
printf("udp clientrn");
WaitSignal();
rtnValue = sendto(clifdUDP,buffer,strlen(buffer),0,(struct sockaddr *)&clieAddrUDP,len);
printf("udp client = %drn",rtnValue);
vTaskDelay(1000);
}
}
xTaskHandle gUdpClientHandle;
void udpClientTaskCreate(void)
{
xTaskCreate(&UdpClientTask, "UdpClientTask", 4096, NULL, 12, &gUdpClientHandle);
}