gpt4 book ai didi

ios - 如何为 NSURLSession 连接选择特定的网络接口(interface)?

转载 作者:行者123 更新时间:2023-12-01 16:23:59 30 4
gpt4 key购买 nike

我不是在谈论可达性。

我所说的是弄清楚如何通过蜂窝接口(interface)从 iOS 设备创建网络连接。

为什么?因为我有设备连接到 WiFi 接入点的条件,所以它选择了 WiFi……但该接入点没有连接互联网,而且无处可去。我有数据,我必须尽一切努力提供,在某些情况下,它会在通往炼狱的 WiFi 网关中丢失。在使用 Reachability 和依赖 MPTCP 两种情况下,Apple 已经在堆栈中优先考虑了 WiFi。

我知道NSURLSessionConfiguration可以设置allowsCellularAccess允许蜂窝访问——我希望需要蜂窝进行路由。

即使在 CFNetwork我正在查看的级别 kCFStreamPropertyConnectionIsCellular状态,kCFStreamPropertyNoCellular禁用蜂窝。

反正我找不到优先考虑蜂窝 radio 。我意识到 Apple 已经竭尽全力偏爱 WiFi,而我反对这一点——这就是为什么我很难找到答案的原因。

我希望将其保持在 Cocoa 级别,但不反对进入 Foundation 或更深的级别。我想避免尝试解析接口(interface)表(如果它甚至可以访问)来确定哪个是蜂窝接口(interface)。

尽管似乎存在 WiFi,但是否有人成功地通过蜂窝链接创建了网络连接?

Multipath TCP的一些配置吗?答案在这里?

最佳答案

要绑定(bind)到特定接口(interface),据我所知,您必须一直下降到原始套接字级别,并且无法为 NSURLSession 目的提供自定义套接字,因此您基本上是从头开始重写它。您应该提交一个错误,请求支持将 NSURLSession 绑定(bind)到源 IP。

您遇到的行为是 iOS 和断开网络的已知问题。 iOS 9 及更高版本做得更好,但即便如此,它们也可能存在很大问题;这些设备有时会拒绝与 Wi-Fi 网络通信,有时会拒绝与蜂窝网络通信。具体来说,如果任何一个信号很弱,它似乎都会失败。就在今天早上,我实际上不得不通过将 iPhone (iOS 10) 置于飞行模式并仅启用 Wi-Fi 来强制与断开的 Wi-Fi 网络通信。

有人告诉我,您可以通过将网络的 DHCP 服务器配置为不提供路由器广告来解决此问题;也就是说,每次我尝试过时,iOS设备都会不断地反复询问报价。也许那个错误在某个时候得到了修复。如果是这样,它可能值得一试,但不要指望它可以在旧版本的 iOS 中工作。

如果做不到这一点,假设您不需要在 iOS 3 和更早版本中支持 Web 浏览器,您可能会尝试完全消除该 Wi-Fi 网络上的 DHCP 服务器,而只依赖具有零配置 IP 的 DNS 服务发现。这样,设备将看不到路由器,并且不会尝试将数据发送到该接口(interface),除了那些链接本地 IP。

如果由于某种原因这不可能,通常我会建议使用 libcurl 的自定义副本,但我怀疑这是否适用于您的情况,因为 POSIX 网络不会唤醒蜂窝硬件。

关于ios - 如何为 NSURLSession 连接选择特定的网络接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41799178/

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