ESP8266之DNS解析

static struct addrinfo *resolve_host_name(const char *host, size_t hostlen)
{
    struct addrinfo hints;
    memset(&hints, 0, sizeof(hints));
    hints.ai_family = AF_UNSPEC;
    hints.ai_socktype = SOCK_STREAM;

    char *use_host = strndup(host, hostlen);
    if (!use_host)
    {
        return NULL;
    }

    ESP_LOGD(TAG, "host:%s: strlen %lu", use_host, (unsigned long)hostlen);
    struct addrinfo *res;
    if (getaddrinfo(use_host, NULL, &hints, &res))
    {
        ESP_LOGE(TAG, "couldn't get hostname for :%s:", use_host);
        free(use_host);
        return NULL;
    }
    free(use_host);
    return res;
}

static void tcp_client_task(void *pvParameters)
{
    char rx_buffer[128];
    char addr_str[128];
    int addr_family;
    int ip_protocol;

    char ip[128];
    struct addrinfo *cur;
    // 域名解析得到ip地址
    struct addrinfo *res = resolve_host_name(EXAMPLE_SERVER_URL, strlen(EXAMPLE_SERVER_URL));
    if (!res)
    {
        ESP_LOGI(TAG, "DNS resolve host name failed!");
        return;
    }

    for (cur = res; cur != NULL; cur = cur->ai_next)
    {
        inet_ntop(AF_INET, &(((struct sockaddr_in *)cur->ai_addr)->sin_addr), ip, sizeof(ip));
        ESP_LOGI(TAG, "DNS IP:[%s]", ip);
    }

    ESP_LOGI(TAG, "Server IP: %s Server Port:%s", ip, EXAMPLE_SERVER_PORT);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值