电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

如何使用IOS實(shí)現(xiàn)WIFI傳輸

瀏覽:7日期:2022-09-16 18:05:52
問題

業(yè)務(wù)場(chǎng)景上存在需要將手機(jī)里的文件、圖片傳遞給其他的設(shè)備,

不僅僅局限于傳書、資料啥的都有可能傳遞

方案

最base的方法:設(shè)備之間加個(gè)云,設(shè)備上傳資料到云,云同步資料到各個(gè)設(shè)備,適用于多設(shè)備之間,這個(gè)沒講的必要

如果是兩設(shè)備之間,忽略服務(wù)器,怎么搞?聯(lián)想到圖書App中的WiFi傳書,貌似沒云端概念的,怎么做到的?

上菜采用框架GCDWebServer,通過CocoaPods引入

pod 'GCDWebServer', '~> 3.0'設(shè)置本地接收目錄,初始化Server并啟動(dòng)

override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated)if let filepath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first as NSString? {let path = filepath.appendingPathComponent('transfer')if !FileManager.default.fileExists(atPath: path) { do {try FileManager.default.createDirectory(atPath: path, withIntermediateDirectories: false, attributes: nil) } catch {print(error) }}webServer = GCDWebUploader(uploadDirectory: path)webServer?.delegate = selfwebServer?.allowHiddenItems = truewebServer?.allowedFileExtensions = ['doc', 'docx', 'xls', 'xlsx', 'txt', 'pdf', 'jpeg', 'jpg']webServer?.title = '善齋工具'webServer?.prologue = '歡飲使用善齋工具的WIFI管理平臺(tái)'webServer?.epilogue = '善齋書屋制作'if webServer?.start() == true, let address = IPHelper.deviceIPAdress(), address.count > 0, let port = webServer?.port { ipLb.text = '1.確保設(shè)備在同一局域網(wǎng) n2.上傳時(shí)勿關(guān)閉該頁(yè)面 n3.請(qǐng)網(wǎng)頁(yè)中輸入該地址 nhttp://(address):(port)/'} else { ipLb.text = 'GCDWebServer not running!'} }}局域網(wǎng)內(nèi)獲取本機(jī)的ip地址,并設(shè)置其他設(shè)備訪問鏈接

#import <ifaddrs.h>#import <arpa/inet.h>#import <net/if.h>@implementation IPHelper+ (NSString *)deviceIPAdress { NSString *address = @''; struct ifaddrs *interfaces = NULL; struct ifaddrs *temp_addr = NULL; int success = 0; success = getifaddrs(&interfaces); if (success == 0) { // 0 表示獲取成功temp_addr = interfaces;while (temp_addr != NULL) { if( temp_addr->ifa_addr->sa_family == AF_INET) {// Check if interface is en0 which is the wifi connection on the iPhoneif ([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@'en0']) { // Get NSString from C String address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];} } temp_addr = temp_addr->ifa_next;} } freeifaddrs(interfaces); return address; }#define IOS_CELLULAR @'pdp_ip0'#define IOS_WIFI@'en0'#define IOS_VPN @'utun0'#define IP_ADDR_IPv4 @'ipv4'#define IP_ADDR_IPv6 @'ipv6'#pragma mark - 獲取設(shè)備當(dāng)前網(wǎng)絡(luò)IP地址+ (NSString *)getIPAddress:(BOOL)preferIPv4 { NSArray *searchArray = preferIPv4 ? @[ IOS_VPN @'/' IP_ADDR_IPv4, IOS_VPN @'/' IP_ADDR_IPv6, IOS_WIFI @'/' IP_ADDR_IPv4, IOS_WIFI @'/' IP_ADDR_IPv6, IOS_CELLULAR @'/' IP_ADDR_IPv4, IOS_CELLULAR @'/' IP_ADDR_IPv6 ] : @[ IOS_VPN @'/' IP_ADDR_IPv6, IOS_VPN @'/' IP_ADDR_IPv4, IOS_WIFI @'/' IP_ADDR_IPv6, IOS_WIFI @'/' IP_ADDR_IPv4, IOS_CELLULAR @'/' IP_ADDR_IPv6, IOS_CELLULAR @'/' IP_ADDR_IPv4 ] ;NSDictionary *addresses = [self getIPAddresses]; NSLog(@'addresses: %@', addresses);__block NSString *address; [searchArray enumerateObjectsUsingBlock:^(NSString *key, NSUInteger idx, BOOL *stop) { address = addresses[key]; //篩選出IP地址格式 if([self isValidatIP:address]) *stop = YES; } ]; return address ? address : @'0.0.0.0';}+ (BOOL)isValidatIP:(NSString *)ipAddress { if (ipAddress.length == 0) {return NO; } NSString *urlRegEx = @'^([01]?dd?|2[0-4]d|25[0-5]).' '([01]?dd?|2[0-4]d|25[0-5]).' '([01]?dd?|2[0-4]d|25[0-5]).' '([01]?dd?|2[0-4]d|25[0-5])$';NSError *error; NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:urlRegEx options:0 error:&error];if (regex != nil) {NSTextCheckingResult *firstMatch=[regex firstMatchInString:ipAddress options:0 range:NSMakeRange(0, [ipAddress length])];if (firstMatch) { NSRange resultRange = [firstMatch rangeAtIndex:0]; NSString *result=[ipAddress substringWithRange:resultRange]; //輸出結(jié)果 NSLog(@'%@',result); return YES;} } return NO;}+ (NSDictionary *)getIPAddresses{ NSMutableDictionary *addresses = [NSMutableDictionary dictionaryWithCapacity:8];// retrieve the current interfaces - returns 0 on success struct ifaddrs *interfaces; if(!getifaddrs(&interfaces)) {// Loop through linked list of interfacesstruct ifaddrs *interface;for(interface=interfaces; interface; interface=interface->ifa_next) { if(!(interface->ifa_flags & IFF_UP) /* || (interface->ifa_flags & IFF_LOOPBACK) */ ) {continue; // deeply nested code harder to read } const struct sockaddr_in *addr = (const struct sockaddr_in*)interface->ifa_addr; char addrBuf[ MAX(INET_ADDRSTRLEN, INET6_ADDRSTRLEN) ]; if(addr && (addr->sin_family==AF_INET || addr->sin_family==AF_INET6)) {NSString *name = [NSString stringWithUTF8String:interface->ifa_name];NSString *type;if(addr->sin_family == AF_INET) { if(inet_ntop(AF_INET, &addr->sin_addr, addrBuf, INET_ADDRSTRLEN)) {type = IP_ADDR_IPv4; }} else { const struct sockaddr_in6 *addr6 = (const struct sockaddr_in6*)interface->ifa_addr; if(inet_ntop(AF_INET6, &addr6->sin6_addr, addrBuf, INET6_ADDRSTRLEN)) {type = IP_ADDR_IPv6; }}if(type) { NSString *key = [NSString stringWithFormat:@'%@/%@', name, type]; addresses[key] = [NSString stringWithUTF8String:addrBuf];} }}// Free memoryfreeifaddrs(interfaces); } return [addresses count] ? addresses : nil;}在其他設(shè)備中訪問該地址即可

let address = IPHelper.deviceIPAdress()let port = webServer?.porthttp://(address):(port)/備注: 確保設(shè)備在同一局域網(wǎng) 上傳時(shí)勿關(guān)閉該頁(yè)面Game Over

局域網(wǎng)中,設(shè)備作為server,其他設(shè)備作為client,簡(jiǎn)單的HTTP方式上傳文件到server,初始配置的路徑即為server接收后存放文件的路徑

以上就是如何使用IOS實(shí)現(xiàn)WIFI傳輸?shù)脑敿?xì)內(nèi)容,更多關(guān)于IOS實(shí)現(xiàn)WIFI傳輸?shù)馁Y料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: IOS
相關(guān)文章:
主站蜘蛛池模板: 酒店厨房设计_中央厨房设计_北京商用厨房设计公司-奇能商厨 | 广州办公室设计,办公室装修,写字楼设计,办公室装修公司_德科 | 保镖公司-私人保镖-深圳保镖公司【环宇兄弟保镖】 | 碎石机设备-欧版反击破-欧版颚式破碎机(站)厂家_山东奥凯诺机械 高低温试验箱-模拟高低温试验箱订制-北京普桑达仪器科技有限公司【官网】 | 篷房[仓储-婚庆-展览-活动]生产厂家-江苏正德装配式帐篷有限公司 | 纯化水设备-EDI-制药-实验室-二级反渗透-高纯水|超纯水设备 | 提升海外网站流量,增加国外网站访客UV,定制海外IP-访客王 | 真空乳化机-灌装封尾机-首页-温州精灌 | 上海办公室装修_上海店铺装修公司_厂房装潢设计_办公室装修 | 光谱仪_积分球_分布光度计_灯具检测生产厂家_杭州松朗光电【官网】 | 存包柜厂家_电子存包柜_超市存包柜_超市电子存包柜_自动存包柜-洛阳中星 | 斗式提升机_链式斗提机_带式斗提机厂家无锡市鸿诚输送机械有限公司 | 冷水机,风冷冷水机,水冷冷水机,螺杆冷水机专业制造商-上海祝松机械有限公司 | 蔡司三坐标-影像测量机-3D扫描仪-蔡司显微镜-扫描电镜-工业CT-ZEISS授权代理商三本工业测量 | 震动筛选机|震动分筛机|筛粉机|振筛机|振荡筛-振动筛分设备专业生产厂家高服机械 | 硬质合金模具_硬质合金非标定制_硬面加工「生产厂家」-西迪技术股份有限公司 | 国际船舶网 - 船厂、船舶、造船、船舶设备、航运及海洋工程等相关行业综合信息平台 | 超声波乳化机-超声波分散机|仪-超声波萃取仪-超声波均质机-精浩机械|首页 | app开发|app开发公司|小程序开发|物联网开发||北京网站制作|--前潮网络 | 升降机-高空作业车租赁-蜘蛛车-曲臂式伸缩臂剪叉式液压升降平台-脚手架-【普雷斯特公司厂家】 | 液压油缸-液压站生产厂家-洛阳泰诺液压科技有限公司 | 大通天成企业资质代办_承装修试电力设施许可证_增值电信业务经营许可证_无人机运营合格证_广播电视节目制作许可证 | 手持式3d激光扫描仪-便携式三维立体扫描仪-北京福禄克斯 | 发电机组|柴油发电机组-批发,上柴,玉柴,潍柴,康明斯柴油发电机厂家直销 | 医院专用门厂家报价-医用病房门尺寸大全-抗菌木门品牌推荐 | SRRC认证_电磁兼容_EMC测试整改_FCC认证_SDOC认证-深圳市环测威检测技术有限公司 | 上海单片机培训|重庆曙海培训分支机构—CortexM3+uC/OS培训班,北京linux培训,Windows驱动开发培训|上海IC版图设计,西安linux培训,北京汽车电子EMC培训,ARM培训,MTK培训,Android培训 | 细沙回收机-尾矿干排脱水筛设备-泥石分离机-建筑垃圾分拣机厂家-青州冠诚重工机械有限公司 | 变压器配件,变压器吸湿器,武强县吉口变压器配件有限公司 | 不干胶标签,不干胶标签纸_厂家-山东同力胶粘制品 | 2025福建平潭岛旅游攻略|蓝眼泪,景点,住宿攻略-趣平潭网 | 江门流水线|江门工作台|江门市伟涛行工业设备有限公司 | 仿真茅草_人造茅草瓦价格_仿真茅草厂家_仿真茅草供应-深圳市科佰工贸有限公司 | 可程式恒温恒湿试验箱|恒温恒湿箱|恒温恒湿试验箱|恒温恒湿老化试验箱|高低温试验箱价格报价-广东德瑞检测设备有限公司 | 西点培训学校_法式西点培训班_西点师培训_西点蛋糕培训-广州烘趣西点烘焙培训学院 | 江门流水线|江门工作台|江门市伟涛行工业设备有限公司 | 九州网址_专注于提供网址大全分享推广中文网站导航服务 | 天津市能谱科技有限公司-专业的红外光谱仪_红外测油仪_紫外测油仪_红外制样附件_傅里叶红外光谱技术生产服务厂商 | 二手Sciex液质联用仪-岛津气质联用仪-二手安捷伦气质联用仪-上海隐智科学仪器有限公司 | 代理记账_免费注册公司_营业执照代办_资质代办-【乐财汇】 | 盘装氧量分析仪-防爆壁挂氧化锆分析仪-安徽吉帆仪表有限公司 |