gpt4 book ai didi

ios - iPhone:启用蜂窝 radio 的 IPv4 Wi-Fi 访问失败

转载 作者:行者123 更新时间:2023-12-03 12:08:49 29 4
gpt4 key购买 nike

我有一个 iPhone 应用程序,它使用 GCDAsyncSocket 通过 Wi-Fi 进行 UPnP 查询以定位连接 Wi-Fi 的相机。所有通信都使用摄像机自身创建的 ad-hoc 网络上的 IPv4 地址,并且该应用程序在 2500 多个现场部署中正常工作。

但是,我有一位客户在他的 iPhone 上失败了,除非飞行模式已打开,或者蜂窝数据已关闭。同一台相机在他的 iPad mini 上运行良好,所以我们可以确定这不是相机的错。

该应用程序设置了一个监听套接字:

_listenSocket = [[GCDAsyncSocket alloc] initWithDelegate:self 
delegateQueue:dispatch_get_global_queue(QOS_CLASS_UTILITY, 0)];

_listenSocket.IPv6Enabled = NO;

accepted = [_listenSocket acceptOnInterface:getWirelessInterface()
port:_upnpPort error:&error];

然后它会设置一个发送套接字,同时禁用 IPV6;通过无线接口(interface)连接到主机(在已知或可疑的 IP 地址);并发送一个 UPnP SUBSCRIBE 消息:
_sendSocket = [[GCDAsyncSocket alloc] initWithDelegate:self 
delegateQueue:dispatch_get_global_queue(QOS_CLASS_UTILITY, 0)];

if (!_sendSocket) {
NSLog(@"sendMsg: unable to allocate sendSocket");
return;
}

_sendSocket.IPv6Enabled = NO;

NSError *err = nil;
if (![_sendSocket connectToHost:hostParts[0]
onPort:[hostParts[1] intValue]
viaInterface:getWirelessInterface()
withTimeout:TIMEOUT
error:&err]) // Asynchronous!
{
// If there was an error, it's likely something like
// "already connected" or "no delegate set"
NSLog(@"socket connectToHost error: %@", err);
return;
}

[_sendSocket writeData:[msg dataUsingEncoding:NSUTF8StringEncoding] withTimeout:TIMEOUT tag:1];

通常,这按预期工作。但是,在这种情况下,发送失败;委托(delegate)方法 socketDidDisconnect:withError: 被调用:
sendSocket disconnected with error: Error Domain=GCDAsyncSocketErrorDomain 
Code=8 "IPv6 has been disabled and DNS lookup found no IPv4 address."

如果我删除“xxxSocket.IPv6Enabled = NO;”行,我得到了这个:
listenSocket disconnected with error: Error Domain=NSPOSIXErrorDomain 
Code=65 "No route to host"

各种谷歌搜索表明“没有到主机的路由”表示无法在 IPv6 环境中解析 IPv4 地址,并且“IPv6 已被禁用并且 DNS 查找未发现 IPv4 地址”消息是不言自明的。

为什么这会发生在这一款 iPhone 上,而不是其他所有 iPhone 上(包括我自己的测试仪器)?除了说“关闭蜂窝数据”之外,我该如何解决?如果我使用已经连接到的路由器(ad-hoc 接入点)的 IPv4 地址来让网络首先运行,为什么还要涉及 DNS?

(另一个stackoverflow帖子( GCDAsyncUdpSocket immediately closes when sending to an IPv6 address)建议重试直到一切正常,但我没有成功。)

最佳答案

我无法弄清楚为什么会发生这种情况:它影响了佛罗里达州和加利福尼亚州 T-Mobile 上的至少两个人,但我无法使用华盛顿的 T-Mobile 复制它。

我确实找到了解决方法:替换 connectToHostconnectToAddress ,它直接连接到 IPv4 地址,无需 DNS 解析步骤。而connectToHost允许主机名或 IP 地址,即使使用 IP 地址,它也会运行 DNS 查找步骤,并且当受影响的 iDevice 连接到 T-Mobile 时发生的任何事情都会使查找变得困惑。

关于ios - iPhone:启用蜂窝 radio 的 IPv4 Wi-Fi 访问失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47881681/

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