iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >怎么使用IOS实现WIFI传输
  • 873
分享到

怎么使用IOS实现WIFI传输

2023-06-14 12:06:25 873人浏览 安东尼
摘要

这篇文章主要介绍了怎么使用iOS实现WIFI传输,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。问题业务场景上存在需要将手机里的文件、图片传递给其他的设备,不仅仅局限于传书、资

这篇文章主要介绍了怎么使用iOS实现WIFI传输,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

问题

业务场景上存在需要将手机里的文件、图片传递给其他的设备,

不仅仅局限于传书、资料啥的都有可能传递

方案

最base的方法:设备之间加个云,设备上传资料到云,云同步资料到各个设备,适用于多设备之间,这个没讲的必要

如果是两设备之间,忽略服务器,怎么搞?联想到图书App中的WiFi传书,貌似没云端概念的,怎么做到的?

上菜

采用框架GCDWEBServer,通过CocoaPods引入

pod "GCDWebServer", "~> 3.0"

设置本地接收目录,初始化Server并启动

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 = self        webServer?.allowHiddenItems = true        webServer?.allowedFileExtensions = ["doc", "docx", "xls", "xlsx", "txt", "pdf", "jpeg", "jpg"]        webServer?.title = "善斋工具"        webServer?.prologue = "欢饮使用善斋工具的WIFI管理平台"        webServer?.epilogue = "善斋书屋制作"                if webServer?.start() == true, let address = IPHelper.deviceIPAdress(), address.count > 0, let port = webServer?.port {            ipLb.text = "1.确保设备在同一局域网 \n2.上传时勿关闭该页面 \n3.请网页中输入该地址 \nHttp://\(address):\(port)/"        } else {            ipLb.text = "GCDWebServer not running!"        }    }}

局域网内获取本机的ip地址,并设置其他设备访问链接

#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 iPhone                if ([[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 - 获取设备当前网络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]?\\d\\d?|2[0-4]\\d|25[0-5])\\."    "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\."    "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\."    "([01]?\\d\\d?|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];            //输出结果            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 interfaces        struct ifaddrs *interface;        for(interface=interfaces; interface; interface=interface->ifa_next) {            if(!(interface->ifa_flags & IFF_UP)  ) {                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 memory        freeifaddrs(interfaces);    }    return [addresses count] ? addresses : nil;}

在其他设备中访问该地址即可

let address = IPHelper.deviceIPAdress()let port = webServer?.porthttp://\(address):\(port)/

备注:

  • 确保设备在同一局域网

  • 上传时勿关闭该页面

Game Over

局域网中,设备作为server,其他设备作为client,简单的HTTP方式上传文件到server,初始配置的路径即为server接收后存放文件的路径

感谢你能够认真阅读完这篇文章,希望小编分享的“怎么使用IOS实现WIFI传输”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网精选频道,更多相关知识等着你来学习!

--结束END--

本文标题: 怎么使用IOS实现WIFI传输

本文链接: https://www.lsjlt.com/news/270788.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么使用IOS实现WIFI传输
    这篇文章主要介绍了怎么使用IOS实现WIFI传输,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。问题业务场景上存在需要将手机里的文件、图片传递给其他的设备,不仅仅局限于传书、资...
    99+
    2023-06-14
  • iOS怎么使用NSURLConnection实现断点续传下载
    本篇内容介绍了“iOS怎么使用NSURLConnection实现断点续传下载”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一.断点续传的原理...
    99+
    2023-06-30
  • iOS使用NSURLConnection实现断点续传下载
    本文实例为大家分享了iOS使用NSURLConnection实现断点续传下载的具体代码,供大家参考,具体内容如下 一.断点续传的原理 断点续传的原理:每次在想服务器请求下载数据的同时...
    99+
    2024-04-02
  • 如何使用C++实现HTTP流传输?
    如何在 c++++ 中实现 http 流传输?使用 boost.asio 和 asiohttps 客户端库创建 ssl 流套接字。连接到服务器并发送 http 请求。接收 http 响应...
    99+
    2024-05-12
    c++ http
  • 如何使用HTTP实现文本传输
    如何使用HTTP实现文本传输,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网...
    99+
    2023-06-05
  • iOS开发中怎么实现多参数传递
    在iOS开发中,可以通过以下几种方式实现多参数传递:1. 使用NSDictionary或NSMutableDictionary:将多...
    99+
    2023-09-14
    iOS
  • linux中怎么实现文件传输
    这期内容当中小编将会给大家带来有关linux中怎么实现文件传输,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。linux的scp命令 linux 的 scp 命令 可以 在 linux 之间复制 文件 和 ...
    99+
    2023-06-13
  • golang怎么实现大文件传输
    在Golang中可以使用io和net包来实现大文件的传输。下面是一个简单的示例代码,演示了如何将一个大文件分块传输。 package...
    99+
    2024-02-29
    golang
  • Node.Js怎么实现sendfile数据传输
    本篇内容主要讲解“Node.Js怎么实现sendfile数据传输”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Node.Js怎么实现sendfile数据传输”吧!首先我们看一下sendfile的...
    99+
    2023-07-04
  • 怎么用SpringBoot+RabbitMQ实现消息可靠传输
    这篇文章主要介绍了怎么用SpringBoot+RabbitMQ实现消息可靠传输的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用SpringBoot+RabbitMQ实现消息可靠传输文章都会有所收获,下面我们...
    99+
    2023-06-30
  • 如何使用HTTP实现二进制传输
    本篇文章给大家分享的是有关如何使用HTTP实现二进制传输,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。HTTP实现二进制传输。曾经为这事还纠结过。刚工作时游戏都是端游。基本学习...
    99+
    2023-06-05
  • Java 中怎么利用Socket实现网络传输
    今天就跟大家聊聊有关Java 中怎么利用Socket实现网络传输,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。采用Java Socket网络传输的序列化机制,将对象“压扁”成二进制字...
    99+
    2023-06-17
  • Java使用TCP实现数据传输实例详解
    Java使用TCP实现数据传输实例详解TCP所提供服务的主要特点:  1.面向连接的传输;  2.端到端的通信;  3.高可靠性,确保传输数据的正确性,不出现丢失或乱序;  4.全双工方式传输;  5.采用字节流方式,即以字节为单位传输字节...
    99+
    2023-05-31
    java tcp 数据传输
  • java离线文件传输怎么实现
    要实现Java的离线文件传输,可以使用Socket编程来实现。下面是一个简单的离线文件传输的示例代码:服务端代码:```javaim...
    99+
    2023-09-23
    java
  • NetCat怎么实现远程文件传输
    这篇文章主要介绍“NetCat怎么实现远程文件传输”,在日常操作中,相信很多人在NetCat怎么实现远程文件传输问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”NetCat怎么实现远程文件传输”的疑惑有所帮助!...
    99+
    2023-06-29
  • Oracle怎么实现跨平台传输PDB
    本篇内容主要讲解“Oracle怎么实现跨平台传输PDB”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Oracle怎么实现跨平台传输PDB”吧!PDB可以被传输并...
    99+
    2024-04-02
  • nodejs怎么实现http传输大文件
    这篇文章主要介绍“nodejs怎么实现http传输大文件”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“nodejs怎么实现http传输大文件”文章能帮助大家解决问题...
    99+
    2024-04-02
  • iOS通过UIDocumentInteractionController实现应用间传文件
    目录引言一、实现效果二、配置工程三、用法1、弹出文件其他打开方式工具栏2、接收文件引言 话开篇:由于iOS沙盒机制,APP文件存储位置只能当前应用访问,这里简单记录一下用 UIDoc...
    99+
    2023-01-15
    iOS应用间传文件 iOS UIDocumentInteractionController
  • golang怎么实现大文件传输功能
    在Go语言中,可以使用`io.Copy()`函数来实现大文件传输功能。`io.Copy()`函数会从源文件(例如,一个`io.Rea...
    99+
    2023-10-27
    golang
  • Redis怎么实现数据的安全传输
    Redis可以通过以下几种方式来实现数据的安全传输: 使用SSL/TLS:Redis支持使用SSL/TLS来加密客户端和服务器之间...
    99+
    2024-05-07
    Redis
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作