物联网技术
直播中

月水

12年用户 21经验值
私信 关注
[资料]

ESP32 UDP通信客户端例程以及疑问

本人在使用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
static 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);   
}

已退回2积分

更多回帖

发帖
×
20
完善资料,
赚取积分