設置 | 登錄 | 註冊

目前共有4篇帖子。

【程序】lwip-2.0.2通過DNS解析域名

1樓 巨大八爪鱼 2017-4-2 21:36
原工程:https://zh.arslanbar.net/post.php?t=24584
首先,打開配置文件lwipopts.h,添加如下三行,開啟DNS:
#define LWIP_DNS 1
#define LWIP_DHCP_PROVIDE_DNS_SERVERS 1 // 通過DHCP獲取DNS伺服器的地址
#define LWIP_RAND() ((u32_t)rand())
然後打開main.c,添加頭文件:
#include "lwip/dns.h"

編寫dns測試函數:
void dnsfound(const char *name, const ip_addr_t *ipaddr, void *callback_arg)
{
    printf("DNS Found IP: %s\n", ip4addr_ntoa(ipaddr));
}

void test_dns(struct netif *netif)
{
    struct ip4_addr dnsip;
    err_t err = dns_gethostbyname("zh.arslanbar.net", &dnsip, dnsfound, NULL);
    if (err == ERR_OK)
        printf("In cache! IP: %s\n", ip4addr_ntoa(&dnsip));
    else
        printf("Not in cache! err=%d\n", err);
}

在show_addr函數中調用test_dns函數:
void show_addr(struct netif *netif)
{
    struct dhcp *dhcp = netif_dhcp_data(netif);
    static uint8_t displayed = 0;
    if (dhcp->state == DHCP_STATE_BOUND)
    {
        if (displayed == 0)
        {
            printf("DHCP分配成功!\n");
            printf("IP位址: %s\n", ip4addr_ntoa(&dhcp->offered_ip_addr));
            printf("子網掩碼: %s\n", ip4addr_ntoa(&dhcp->offered_sn_mask));
            printf("網關: %s\n", ip4addr_ntoa(&dhcp->offered_gw_addr));
            printf("DNS伺服器: %s\n", ip4addr_ntoa(dns_getserver(0))); // ★
            displayed = 1;
            test_dns(netif); // ★
        }
    }
    else
        displayed = 0;
}

最後,在main函數中的dhcp_start函數調用前加上:dns_init();
2樓 巨大八爪鱼 2017-4-2 21:37
【程序運行結果】
DHCP分配成功!
IP位址: 192.168.1.116
子網掩碼: 255.255.255.0
網關: 192.168.1.1
DNS伺服器: 192.168.1.1
Not in cache! err=-5
DNS Found IP: 106.186.126.193
3樓 巨大八爪鱼 2017-4-4 19:05
在main函數的主循環中還應該加上dns_tmr();的函數調用,調用的間隔時間為1s。
while (1)
{
    //......
    // 若定時器溢出
    if (TIM6->SR & TIM_SR_UIF)
    {
        //......
        if (cnt % 4 == 0)
        {
            // 250ms*4=1s
            etharp_tmr(); // ARP定時處理
            dns_tmr(); // ★DNS定時處理
        }
        //......
    }
}
4樓 巨大八爪鱼 2017-4-5 19:51
其實,在main函數中根本不用加dns_init(),因為在lwip_init函數裏已經自動調用了。

內容轉換:

回覆帖子
內容:
用戶名: 您目前是匿名發表。
驗證碼:
看不清?換一張
©2010-2025 Purasbar Ver3.0 [手機版] [桌面版]
除非另有聲明,本站採用知識共享署名-相同方式共享 3.0 Unported許可協議進行許可。