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

http://bbs.elecfans.com/jishu_1104872_1_1.html

本人在使用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 test\r\n"; 

    clifdUDP = socket(AF_INET,SOCK_DGRAM,0); 
    if( clifdUDP<0 ){
        printf("udp client err\r\n");
    }else{
        printf("udp client ok\r\n");
    }

     /* 填充服务端的资料 */   
    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 client\r\n");
        WaitSignal();
        rtnValue = sendto(clifdUDP,buffer,strlen(buffer),0,(struct sockaddr *)&clieAddrUDP,len);
        printf("udp client = %d\r\n",rtnValue);
        vTaskDelay(1000);
    }  
}

xTaskHandle gUdpClientHandle;

void udpClientTaskCreate(void)
{
    xTaskCreate(&UdpClientTask, "UdpClientTask", 4096, NULL, 12, &gUdpClientHandle);    
}

posted @ 2018-01-04 00:55  XZHDJH  阅读(1053)  评论(0)    收藏  举报