iOS开发——网络编程Swift篇&(一)网络监测
2024-10-15 22:52:32
网络监测
enum ReachabilityType { case WWAN, WiFi, NotConnected } public class Reachability { /** :see: Original post - http://www.chrisdanielson.com/2009/07/22/iphone-network-connectivity-test-example/ */ class func isConnectedToNetwork() -> Bool { var zeroAddress = sockaddr_in(sin_len: , sin_family: , sin_port: , sin_addr: in_addr(s_addr: ), sin_zero: (, , , , , , , )) zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress)) zeroAddress.sin_family = sa_family_t(AF_INET) let defaultRouteReachability = withUnsafePointer(&zeroAddress) { SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($)).takeRetainedValue() } var flags: SCNetworkReachabilityFlags = { return false } let isReachable = (flags & UInt32(kSCNetworkFlagsReachable)) != let needsConnection = (flags & UInt32(kSCNetworkFlagsConnectionRequired)) != return (isReachable && !needsConnection) ? true : false } class func isConnectedToNetworkOfType() -> ReachabilityType { var zeroAddress = sockaddr_in(sin_len: , sin_family: , sin_port: , sin_addr: in_addr(s_addr: ), sin_zero: (, , , , , , , )) zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress)) zeroAddress.sin_family = sa_family_t(AF_INET) let defaultRouteReachability = withUnsafePointer(&zeroAddress) { SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($)).takeRetainedValue() } var flags: SCNetworkReachabilityFlags = { return .NotConnected } let isReachable = (flags & UInt32(kSCNetworkFlagsReachable)) != let isWWAN = (flags & UInt32(kSCNetworkReachabilityFlagsIsWWAN)) != //let isWifI = (flags & UInt32(kSCNetworkReachabilityFlagsReachable)) != 0 if(isReachable && isWWAN){ return .WWAN } if(isReachable && !isWWAN){ return .WiFi } return .NotConnected //let needsConnection = (flags & UInt32(kSCNetworkFlagsConnectionRequired)) != 0 //return (isReachable && !needsConnection) ? true : false }
使用:
// MARK: - 检测网络连接情况 @IBOutlet var statusLabel: UILabel! @IBOutlet var typeLabel: UILabel! @IBAction func checkButtonUpinside(sender: UIButton) { if Reachability.isConnectedToNetwork() { statusLabel.text = "网络连接:可用" } else { statusLabel.text = "网络连接:不可用" } let statusType = Reachability.isConnectedToNetworkOfType() switch statusType{ case .WWAN: typeLabel.text = "连接类型:移动网络" case .WiFi: typeLabel.text = "连接类型:WiFi" case .NotConnected: typeLabel.text = "连接类型:没有网络连接" } }
最新文章
- Spring Security3学习实例
- zstu.2512. Moving Tables(贪心)
- yii和wp做博客
- 简单几何(线段相交) POJ 1410 Intersection
- 转:SQL SERVER数据库中实现快速的数据提取和数据分页
- Table of Contents - MongoDB
- wpf 只在window是ShowDialog打开时才设置DialogResult
- C#子线程更新UI控件的方法总结
- 每隔一段时间执行一次函数。window.setTimeout
- SSAS维度设计中CustomRollupColumn的用法-自定义聚合方式
- MarkDown初遇
- mysql导出数据表结构,必须退出mysql命令.重新使用msyqldump命令
- 【java】读取资源文件key->;value,java.util.ResourceBundle
- git命令 高级
- Https背景与证书在spring boot项目中的使用
- 树的广度优先遍历和深度优先遍历(递归非递归、Java实现)
- c++11のunique_lock和once_flag
- iphone 开发h5 踩过的坑
- 第一个SpringBoot程序
- Centos7 64位 -- glibc-2.29 编译升级方法(已成功)
热门文章
- ashx-auth-黑色简洁验证码
- 关于AsyncTask 的退出
- 【LeetCode 160】Intersection of Two Linked Lists
- Windows下Qt开发环境:OpenGL导入3DMax模型(.3DS)
- Oracle11g导入*.dmp数据文件
- 【数据结构和算法】 O(1)时间取得栈中的最大 / 最小元素值
- TRANSLATE
- sublime text2中ctags安装问题的解决
- [LeetCode] Add Digits (a New question added)
- Tkinter教程之Button篇(1)