RAK439 实现DNS功能



  • 我们使用RAK439模块性能和稳定性还是可以的,目前我们的产品也已经小批量量产出货了,但是目前里面没有添加DNS功能,DNS是很有必要添加的,请问是否有RAK439DNS的例程?



  • 我看到了这个API,这个应该可以用来实现DNS功能,但是在调用ret = gethostbyname(&hostname[0] ,13 ,&out_ipaddr,AF_INET);前应该作什么,给一个大致步奏就行?或者给个思路就行!


  • administrators

    你好,DNS功能是可以使用的。

    • 如果你是OS的代码,请使用gethostbyname(&hostname[0] ,13 ,&out_ipaddr,AF_INET)函数获取DNS解析后的地址。请注意,获取DNS解析地址必须在模块为STA模式下且模块连上网后才能成功。示例代码如下:

        if (app_demo_ctx.rw_connect_status == STATUS_FAIL || app_demo_ctx.rw_ipquery_status == STATUS_FAIL) {
          DPRINTF("reconnect and ipquery...\r\n");
          rw_appdemo_context_init();   
          rw_sysDriverReset();
          rw_network_init(&conn, DHCP_CLIENT, NULL);
        }
        else
         {
           uint32_t ret = 0;
           gethostbyname("www.rakwirelesss.com",strlen("www.rakwireless.com"),&ret,AF_INET);
           DPRINTF("ret=%X\r\n",ret);
           rw_sysSleep(3000);
         }
      
    • 如果你是NOS的代码,请使用rw_dnsRequest(const char *host_name, uint8_t name_len, uint16_t family)函数获取DNS解析后的地址,解析后的地址会通过的回调函数返回。请注意,获取DNS解析地址必须在模块为STA模式下且模块连上网后才能成功。示例代码如下:

        if (app_demo_ctx.rw_connect_status == STATUS_OK && app_demo_ctx.rw_ipquery_status == STATUS_OK) {
      
                 rw_dnsRequest("www.rakwireless.com",strlen("www.rakwireless.com"),AF_INET);							
         }else if (app_demo_ctx.rw_connect_status == STATUS_FAIL || app_demo_ctx.rw_ipquery_status == STATUS_FAIL) {
                 DPRINTF("reconnect and ipquery...\r\n");
                 rw_appdemo_context_init();   
                 w_sysDriverReset();
                 rw_network_init(&conn, DHCP_CLIENT, NULL);
        }


  • 谢谢你的回复,我用的是NOS的,我看了这个函数,返回的IP是在回调中得到的,请问这个DNS的回调怎样实现,怎样读取这个返回来的IP?



  • 或者说如果DNS成功了是不是就代表可以连接到该服务器了,不用使用再使用IP进行连接?
    我们的项目应用是这样的:使用TCP clientpost数据,但是目前我是使用的IP和端口建立连接的,请问这个使用如果使用DNS成功后,是不是代表就不用再使用IP和端口建立连接了,还是说我需要把DNS返回的IP拿到后,再使用IP进行连接,最好是能拿到DNS解析出来的IP,因为IP我们需要显示到显示屏上,请问以上DNS功能怎样实现。



  • 请问回调函数在哪来注册的?怎样注册?



  • 在初始化中找到回调了,谢谢。


登录后回复
 

与 RAK支持中心 的连接断开,我们正在尝试重连,请耐心等待