首页 > 代码库 > 使用网络诊断(Using Network Diagnostics)

使用网络诊断(Using Network Diagnostics)

在许多基于网络的应用中,会发生基于网络的错误,这些错误与你的应用无关。然而,大多数用户可能不知道为什么应用失败。CFNetDiagnostics API为你提供一种快速而简单的方法来帮助用户解决网络问题。

如果你的应用使用一个CFStream 对象,然后调用CFNetDiagnosticCreateWithStreams函数创建一个网络诊断引用(CFNetDiagnosticRef) 。CFNetDiagnosticCreateWithStreams有一个分配器,读取流和写入流作为参数。如果你的应用只使用读取流或写入流,未使用的参数设置为NULL

如果不存在流,你还可以直接从URL创建一个网络诊断引用。要做到这一点,调用CFNetDiagnosticCreateWithURL 函数,并传递一个分配器,URLCFURLRef。它将返回一个网络诊断引用供你使用。

为了通过网络诊断助手诊断问题,调用CFNetDiagnosticDiagnoseProblemInteractively 函数并传递网络诊断引用。清单6-1展示了如何使用CFNetDiagnostics 诊断在运行循环上实现的流。

清单6-1 当发生流错误时使用CFNetDiagnostics API

 case kCFStreamEventErrorOccurred:
        CFNetDiagnosticRef diagRef =
            CFNetDiagnosticCreateWithStreams(NULL, stream, NULL);
        (void)CFNetDiagnosticDiagnoseProblemInteractively(diagRef);
        CFStreamError error = CFReadStreamGetError(stream);
        reportError(error);
        CFReadStreamClose(stream);
        CFRelease(stream);
        break;


CFNetworkDiagnostics 同样可以检索问题的状态,而不是使用网络诊断助手。通过调用CFNetDiagnosticCopyNetworkStatusPassively,便可以完成。该函数返回一个常数例如kCFNetDiagnosticConnectionUp 或kCFNetDiagnosticConnectionIndeterminate


官方原文地址:

https://developer.apple.com/library/ios/documentation/Networking/Conceptual/CFNetwork/UsingNetworkDiagnostics/UsingNetworkDiagnostics.html#//apple_ref/doc/uid/TP30001132-CH7-SW1

使用网络诊断(Using Network Diagnostics)