gpt4 book ai didi

ios - NSNetService Resolve ipv6 无法在其上发起http请求

转载 作者:行者123 更新时间:2023-11-28 19:55:27 26 4
gpt4 key购买 nike

最近,我在解析 NSNetService 时遇到了问题。

我发布了一个类型为 _http._tcp.NSNetService,就像一个 http 服务器。否则,在另一台设备上,我开始搜索这项服务,它会找到它。

找到它之后,我在上面应用了resolveWithTimeout

在解析时,有时我只获得 ipv6,我无法使用 NSURLConnection sendAsynchronousRequest: queue: completionHandler: 进行 HTTPRequest。

我如何申请并且 URL 上的 HTTPRequest 包含 ipv6?我该如何处理这个问题?

最佳答案

看起来您正在根据 NSNetService 中提供的信息构建类似 http://{IP}:{port}/ 的字符串。它适用于 IPv4 地址,生成的字符串类似于 http://192.168.1.8:8080/

但是,IPv6 地址使用冒号作为分隔符(而不是句点),因此相同的代码会生成类似 http://fe80::e31:db5a:0089:98ba:8080/ 的字符串, 结果地址不正确。首先,您需要将地址括在方括号中:http://[fe80::e31:db5a:0089:98ba]:8080/。其次,fe80::/64(如示例中所示)地址是链路本地的,可以分配给每个支持 IPv6 的接口(interface),因此您还需要提供要使用的接口(interface),例如http://[fe80::e31:db5a:0089:98ba%25en0]:8080/ 其中 %25 是编码的百分号,en0 是要使用的接口(interface)名称。

总而言之,您需要为 IPv4 和 IPv6 地址构建不同的字符串。说到这里,有苹果的推荐:

As a rule, you should not resolve a service to an IP address and port number unless you are doing something very unusual. – Connecting to a Bonjour Service by IP Address

如果可能,请尝试使用此 URL 字符串:http://{hostname}:{port}/,您将不需要那些额外的 IP 地址操作。

关于ios - NSNetService Resolve ipv6 无法在其上发起http请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26712503/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com