-1

我正在尝试将 DNSServiceRegister(...) 函数用作 DNS_SD 包的一部分,对于“主机”,它需要一个主机名作为字符串。但是,可以通过 IP 地址注册主机,但 IP 地址必须以二进制表示形式格式化(而不是 192.168.1.23,它将是 0x1701a8c0)。

我假设我可以通过直接传入值 1701a8c0 来欺骗函数,但我尝试过的任何方法似乎都不起作用。strncpy 不返回预期值,只是粘贴它不起作用,创建一个 NSData 然后一个 NSString 不起作用。我可以编写一个循环,一次构建 char 数组 1 个条目,但必须有另一种方法吗?

    struct sockaddr_in sa;
 ...
        ipBinary=[[NSData alloc] initWithBytes:&(sa.sin_addr.s_addr) length:8];
    ipBinStr=[[NSString alloc] initWithData:ipBinary encoding:NSUTF8StringEncoding];

我也无法对此进行任何变体:

        strncpy(str,(char *)&(sa.sin_addr.s_addr),8);
4

1 回答 1

1

要通过 IP 地址注册主机,您可能必须以 ASCII 字符串表示形式传递地址,例如字符串“192.168.1.23”。您可以使用inet_ntoa()或更好地getnameinfo使用NI_NUMERICHOST标志将 a 转换struct sockaddr为字符串。

于 2012-07-30T09:08:16.550 回答