ZBLOG

苹果开源的mDNS中没有mdns_add_service函数

苹果开源的 mDNSResponder 是实现 mDNS 的一个广泛使用的库,但它并没有提供类似 mdns_add_service 这样的函数。相反,mDNSResponder 使用的是事件驱动的方法,通过结构体和 API 函数进行服务注册和管理。

下面是如何在 mDNSResponder 中注册 HTTP 服务的基本步骤:

1. 引入必要的头文件

首先,确保你包含了相关的头文件,例如:

#include <dns_sd.h>

2. 创建服务和文本记录

在注册服务之前,你需要定义并创建服务描述信息以及可选的 TXT 记录。

示例代码

以下是一个示例代码片段,用于如何使用 mDNSResponder 注册一个 _http._tcp 服务:

#include <stdio.h>
#include <string.h>
#include <dns_sd.h>

void DNSSD_API RegisterServiceReply(
    DNSServiceRef sdRef,
    DNSServiceFlags flags,
    uint32_t interfaceIndex,
    DNSServiceErrorType errorCode,
    const char *name, 
    const char *regtype, 
    const char *domain, 
    void *context) 
{
    if (errorCode == kDNSServiceErr_NoError) {
        printf("Registered service: %s.%s%s\n", name, regtype, domain);
    } else {
        fprintf(stderr, "Failed to register service: %d\n", errorCode);
    }
}

int main() {
    DNSServiceRef serviceRef;
    
    // Define your service name and type.
    const char *serviceName = "MyHTTPService";
    const char *serviceType = "_http._tcp";
    
    // Register the service with a specific port (e.g., 80).
    DNSServiceErrorType error = DNSServiceRegister(
        &serviceRef,
        0,                          // No special flags
        0,                          // Default interface index
        serviceName,               // Service name
        serviceType,               // Service type
        NULL,                      // Domain (use default)
        NULL,                      // Hostname (use default)
        htons(80),                 // Port in network byte order
        0,                          // TXT record length
        NULL,                      // TXT record data (can be added later)
        RegisterServiceReply,      // Callback function for registration result
        NULL                        // Context pointer for callback function        
    );

   if (error != kDNSServiceErr_NoError) {
       fprintf(stderr, "Error registering service: %d\n", error);
       return 1;
   }

   printf("Registering...\n");
   
   while (1) {
       DNSServiceProcessResult(serviceRef);
   }

   return 0;
}

注意事项

  1. 回调函数RegisterServiceReply 是用于处理服务注册结果的回调函数。
  2. 主循环DNSServiceProcessResult 是阻塞调用,会处理接收到的 mDNS 响应,因此需要在应用程序主循环中运行。
  3. TXT Records:如果你需要添加 TXT 记录,可以通过其他 API 来设置。

这段代码展示了如何使用 Apple 的 mDNSResponder 注册一个 HTTP 服务。具体细节可能会因你的需求而有所不同,但以上方法应该能帮助你开始进行服务注册。


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?