HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了iOS:reachabilityWithHostname YES虽然它应该是NO大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我测试了不同的框架,例如

> https://github.com/tonymillion/Reachability
> https://github.com/VerticodeLabs/VCLReachability
> https://github.com/kstenerud/KSReachability

我想知道主机是否可以访问.在我的iPhone上,我将iMac设置为代理(Charles)并阻止或不阻止连接,但可达性始终为YEs.仅当我设置不存在的主机时,它才返回NO.但是如果主机存在但我阻止了它的连接,我总是得到isReachable.有没有办法检查主机是否真的可以访问?

如果我尝试使用KSReachability,我会做以下事情:

self.reachability = [KSReachability reachabilityToHost:@"www.stackoverflow.com"];
self.reachability.notificationName = kDefaultNetworkReachabilityChangedNotification;
self.reachability.onReachabilityChanged = ^(KSReachability *reachability) {
    NSLog(@"isReachable: %i",reachability.reachablE);
};

我总是得到isReachable:1有以下配置:

>连接到Wifi
>将我的iMac配置为http-Proxy
>在Charles Proxy中阻止www.stackoverflow.com

当我尝试在Safari中访问www.stackoverflow.com时,无法打开页面(按预期方式).在这种情况下,我希望可达性为false(isReachable:0).

编辑
所以对我来说最重要的问题是 – 如何实现我期待的行为?即应用程序不断检查给定的主机是否真的可以访问?

解决方法

代码声明:
self.reachability = [KSReachability reachabilityToHost:@"www.stackoverflow.com"];

实际上调用以下方法

SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL,[hostName UTF8String]);

SCNetworkReachability参说:

解释清除iOS系统不向外界发送任何请求以检查可达性.它只是告诉数据包可以离开设备.如果系统要发送请求,它会自动表示它已连接到网络.

你可以通过提及像“www.stackoverflow.com”这样的有效主机验证这一点,并检查没有请求发送的查尔斯(首先取消阻止它).你也可以查看其他有效的主机名,如“www.abcdefgh.com”(通过在Safari中运行并查看查尔斯来验证这一点)它还为您提供了可访问性,但查尔斯没有显示请求.如果您在任何有效主机之前放置http://,如“http://www.stackoverflow.com”之类,它也将无法实现可访问性.所以很明显它不是传出的http请求.如果系统必须在外面发送请求,那么提供课程的重点是什么?开发人员可以创建网络连接并尝试连接到主机并查看它是通过还是失败.

然而有趣的是,如果提供像“www.hjjkhkhk.com”这样的无效主机,iOS系统会将可达性视为错误.现在的问题是iOS系统如何在不向外界发送任何查询的情况下找到有效或无效的主机?可能是它定期缓存DNS范围列表???对我来说极不可能.

大佬总结

以上是大佬教程为你收集整理的iOS:reachabilityWithHostname YES虽然它应该是NO全部内容,希望文章能够帮你解决iOS:reachabilityWithHostname YES虽然它应该是NO所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。