我有一个使用Apples可访问性代码的应用程序.当我退出应用程序时,打开飞行模式,返回到应用程序,我正确地收到一条消息,指出没有可用的连接.如果我回去关闭飞行模式并返回应用程序,我仍然得到没有连接可用的消息.具体问题代码是这样的:
NetworkStatus status = kNotReachable;
if (SCNetworkReachabilityGetFlags(reachabilityRef, &flags))
{
status = [self networkStatusForFlags: flags];
return status;
}
Run Code Online (Sandbox Code Playgroud)
我进入if语句,标志最终为0(kSCNetworkReachabilityFlagsTransientConnection).这究竟是什么意思?有没有人经历过这个,有没有人知道解决方法或修复?几个小时一直在玩它......
我正在尝试检查服务器是在线还是离线:我遇到连接到它时有端口的问题
我的代码目前:
struct sockaddr_in address;
address.sin_len = sizeof(address);
address.sin_family = AF_INET;
address.sin_port = htons(25667);
address.sin_addr.s_addr = inet_addr("fr7.mooshroom.net");
Reachability *reachability = [Reachability reachabilityWithAddress:&address];
Run Code Online (Sandbox Code Playgroud)
请让我知道我做错了什么.请不要把我与其他问题联系起来,我已经搜索过了,没有人能找到我正在寻找的东西.
我有一个允许用户自动登录的应用程序.我的老板想要的是,当应用程序启动时,应用程序需要测试与我们服务器的连接(而不仅仅是测试是否有WiFi或3G网络).我借用了苹果的Reachability样本,它有效.
问题是需要太长时间,特别是在发布时.我在没有互联网连接的本地无线网络上尝试过,我花了将近半分钟的时间.因为自动登录在-ViewDidLoad()中调用了半分钟,所以ui没有加载.花费很长时间的时间是完全不可接受的.更糟糕的是,如果我的应用程序加载时间太长,iOS甚至可能会关闭应用程序.
此外,我的应用程序中有很多Web服务调用.我理解每个网络服务电话都有可能失败,因为即使用户从一个地方走到另一个地方,iPhone/iPad也可能很容易丢失或获得连接.我个人不喜欢它,但这就是我的老板要我做的事情,我可能不得不经常在应用程序中测试连接.
所以我在这里寻找的是一种非常快速(几秒钟内)检测连接的方法,或者是在幕后进行连接而不影响用户体验的方法.
有人有建议吗?
感谢您抽出宝贵时间阅读我的问题.
我在使AFNetworking Reachability模块工作时遇到了一些麻烦.我已经使用ReachabilityStatusChangeBlock设置了AFHTTPRequestOperationManager,但它永远不会被调用.
self.manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:[NSURL URLWithString:@"http://192.168.1.2:3000"]];
self.manager.responseSerializer = [AFJSONResponseSerializer serializer];
NSOperationQueue *operationQueue = self.manager.operationQueue;
[self.manager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
switch (status) {
case AFNetworkReachabilityStatusNotReachable:
// we need to notify a delegete when internet conexion is lost.
// [delegate internetConexionLost];
NSLog(@"No Internet Conexion");
break;
case AFNetworkReachabilityStatusReachableViaWiFi:
NSLog(@"WIFI");
break;
case AFNetworkReachabilityStatusReachableViaWWAN:
NSLog(@"3G");
break;
default:
NSLog(@"Unkown network status");
[operationQueue setSuspended:YES];
break;
}
Run Code Online (Sandbox Code Playgroud)
我已经在我的.pch中导入了SystemConfiguration/SystemConfiguration.h,正如文档所述.每当我要求状态时,我得到值-1.
有帮助吗?
更新:
我在这里添加我的PodFile:
pod 'AFNetworking' ,'~> 2.0.0'
pod 'AFNetworking/Reachability' ,'~> 2.0.0'
Run Code Online (Sandbox Code Playgroud) 我正在将我们的游戏移植到Unity,并需要一些有关Unity中互联网连接检查的帮助.官方Unity文档说'不要使用Application.internetReachability.所以我很困惑哪些代码可以在这里工作.在任何论坛中都找不到任何突出的解决方案.我想检查Wi-Fi或GPRS是否开启哪个应该适用于iOS和Android.提前致谢.
我有这个代码用于检查互联网连接,它工作得非常好,直到我更新到Xcode 8和swift 3.现在它对于蜂窝网络返回false,对于WiFi网络则为真,我不知道为什么.
这是代码:
open class Reachability {
class func isConnectedToNetwork() -> Bool {
var zeroAddress = sockaddr_in(sin_len: 0, sin_family: 0, sin_port: 0, sin_addr: in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0))
zeroAddress.sin_len = UInt8(MemoryLayout.size(ofValue: zeroAddress))
zeroAddress.sin_family = sa_family_t(AF_INET)
let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) {
$0.withMemoryRebound(to: sockaddr.self, capacity: 1) {zeroSockAddress in
SCNetworkReachabilityCreateWithAddress(nil, zeroSockAddress)
}
}
var flags: SCNetworkReachabilityFlags = SCNetworkReachabilityFlags(rawValue: 0)
if SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) == false {
return false
}
let isReachable = flags == .reachable
let …Run Code Online (Sandbox Code Playgroud) 我需要区分连接到蜂窝网络和 WiFi 的 iPhone/iPad 用户。在SCNetworkReachabilityFlag .isWWAN下,Apple 表示:
The absence of this flag does not necessarily mean that a connection will never pass over a cellular network. If you need to robustly prevent cellular networking, read Avoiding Common Networking Mistakes in Networking Overview.
这意味着,如果启用此标志,则用户很可能通过蜂窝网络进行连接,但不能保证。我读过《避免常见的网络错误》,但这没有帮助。
我如何才能 100% 确定用户在(或不在)蜂窝网络上?
我的代码如下所示:
let reachability = SCNetworkReachabilityCreateWithName(nil, "localhost")
var flags = SCNetworkReachabilityFlags()
if let reachability = reachability {
SCNetworkReachabilityGetFlags(reachability, &flags)
}
let isConnectedToCellular = flags.contains(.isWWAN)
Run Code Online (Sandbox Code Playgroud)
编辑:
如果您使用此代码,请确保在后台线程而不是主线程上调用它。
使用Reachability Class(来自Apple)检查远程主机的可用性是否明智?例如,www.google.com
或者我应该使用
NSString *connectedString = [[NSString alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com/"]];
if ([connectedString length] != 0) // Host Available
Run Code Online (Sandbox Code Playgroud)
这是最好的选择,因为我听说Reachability有检查主机可用性的错误?
我正在使用Reachability类来检测wifi可用性.
在某些情况下,ipad将连接到一个wifi网络,用户将连接到另一个可用的wifi网络.
在这些网络转换期间,不会生成可达 - >无法访问 - >可达通知.
这个连接改变了ipad的ip地址改变的地方,我试图听.
是否存在本地wifi连接更改的通知,或者我是否必须定期轮询我的IP?
我有一个小问题.我正在使用Reachability类来测试互联网连接,它运行良好.但是假设如果用户正在使用Wifi,但是他们无法访问互联网,则应该重试几秒钟,然后它应该向用户显示警报以切换蜂窝网络.以下是我的代码.当Wifi打开时,我没有指出网络连接速度慢的地方.
self.internetReachable = [Reachability reachabilityForInternetConnection];
[self.internetReachable startNotifier];
//_hasConnectivity = ([self.internetReachable currentReachabilityStatus] != NotReachable);
if([self.internetReachable currentReachabilityStatus] == NotReachable) {
_hasConnectivity = NO;
}
else if([self.internetReachable currentReachabilityStatus] == ReachableViaWiFi){
_hasConnectivity = YES;
}
else if([self.internetReachable currentReachabilityStatus] == ReachableViaWWAN) {
_hasConnectivity = YES;
}
Run Code Online (Sandbox Code Playgroud) reachability ×10
ios ×5
iphone ×5
networking ×3
objective-c ×3
swift ×2
ios6 ×1
ios7 ×1
ipad ×1
ping ×1