ZBLOG

mDNSResponder中如何实时更改 responder中的TXT内容

在使用 mDNSResponder 中实时更改 TXT 记录的内容,可以通过以下步骤进行:

步骤

  1. 初始化 mDNSResponder:确保你已经成功地初始化了 mDNSResponder,并且正在运行一个服务。

  2. 创建和注册服务:创建一个包含 TXT 记录的服务,使用 mDNS_RegisterService 函数。示例代码如下:

   #include <CoreFoundation/CoreFoundation.h>
   #include <dns_sd.h>

   DNSServiceRef serviceRef;

   void register_service() {
       const char *service_name = "MyService";
       const char *service_type = "_myservice._tcp.";
       const char *domain = NULL; // Default domain
       uint16_t port = htons(12345); // Example port number
       
       // Create the TXT record
       const char *txt_record_key = "exampleKey";
       const char *txt_record_value = "initialValue";

       DNSRecordRef txtRecord;
       DNSServiceErrorType error;

       // Register the service with initial TXT records
       error = DNSServiceRegister(&serviceRef,
                                   0,
                                   0,
                                   service_name,
                                   service_type,
                                   domain,
                                   NULL, // Hostname (optional)
                                   port,
                                   sizeof(txt_record_key) + sizeof(txt_record_value),
                                   &txtRecord,
                                   NULL, // No specific callback needed here for registration
                                   NULL);
                                   
       if (error != kDNSServiceErr_NoError) {
           fprintf(stderr, "Error registering service: %d\n", error);
           return;
       }

       // Add TXT record to the service
       error = DNSServiceAddRecord(serviceRef,
                                    &txtRecord,
                                    0,
                                    sizeof(txt_record_key) + sizeof(txt_record_value),
                                    txt_record_value, 
                                    0);

        if (error != kDNSServiceErr_NoError) {
            fprintf(stderr, "Error adding TXT record: %d\n", error);
            return;
        }
    }
  1. 更新 TXT 记录:要实时更改 TXT 内容,你可以使用 DNSServiceUpdateRecord 或者重新添加/删除记录的方式。下面是如何更新 TXT 的示例代码:
   void update_txt_record(const char* newValue) {
        DNSServiceErrorType error;

        // 删除旧的TXT记录(需要保存原来的TXT Record Reference)
        error = DNSServiceRemoveRecord(serviceRef, txtRecord, 0);
        if (error != kDNSServiceErr_NoError) {
            fprintf(stderr, "Error removing old TXT record: %d\n", error);
            return;
        }

        // 添加新的TXT记录
        error = DNSServiceAddRecord(serviceRef,
                                     &txtRecord,
                                     0,
                                     strlen(newValue), 
                                     newValue, 
                                     0);

        if (error != kDNSServiceErr_NoError) {
            fprintf(stderr, "Error adding new TXT record: %d\n", error);
            return;
        }
    }
  1. 设置循环或条件触发器:为了实时监控并在需要时更新,可以设置一个定时器、事件循环或者其他条件触发机制来调用 update_txt_record() 方法。

注意事项

  • 确保在执行任何网络操作时,主线程不会被阻塞。
  • 错误处理是非常重要的,应确保每个函数调用都有适当的错误检查。
  • 在应用程序退出或不再需要该服务时,请务必注销服务并清理资源。

以上是在使用 mDNSResponder 时更新响应者中的 TXT 内容的一般流程和示例代码。请根据具体需求做适当调整!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=6145

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?