iOS swift 类似AirDrop的近场数据传输 MultipeerConnectivity 框架

这篇具有很好参考价值的文章主要介绍了iOS swift 类似AirDrop的近场数据传输 MultipeerConnectivity 框架。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.github上的demo

insidegui/MultipeerDemo – github

insidegui/MultipeerKit – github(我用的是这个写我的项目)

2.特别说明:Info.plist 要求

iOS swift 类似AirDrop的近场数据传输 MultipeerConnectivity 框架,swift

Info.plist 要求
从 iOS 14 开始,为了使 MultipeerKit 正常工作,您需要在应用的 Info.plist 文件中包含两个关键字。

这些键是 Privacy - Local Network Usage Description (NSLocalNetworkUsageDescription) 和 Bonjour services (NSBonjourServices)。

对于隐私键,包括一个人类可读的描述,说明用户允许您的应用访问本地网络上的设备的好处是什么。

Bonjour 服务键是您的应用将要浏览的服务类型的数组。对于 MultipeerKit,该条目的格式应为 _servicename._tcp,其中 servicename 是您在 MultipeerConfiguration 中设置的 serviceType。如果您使用的是默认配置,此键的值应为 _MKSVC._tcp。

3.1 info.plist没有配置正确会报-72008的错误

iOS swift 类似AirDrop的近场数据传输 MultipeerConnectivity 框架,swift

2023-08-24 15:16:45.917165+0800 RemoteCamera[5294:3939055] [MultipeerConnection] resume()
2023-08-24 15:16:45.923267+0800 RemoteCamera[5294:3939256] [MCNearbyServiceBrowser] NSNetServiceBrowser did not search with error dict [{
    NSNetServicesErrorCode = "-72008";
    NSNetServicesErrorDomain = 10;
}].
2023-08-24 15:16:45.923357+0800 RemoteCamera[5294:3939255] [MCNearbyServiceAdvertiser] Server did not publish: errorDict [{
    NSNetServicesErrorCode = "-72008";
    NSNetServicesErrorDomain = 10;
}].
2023-08-24 15:16:45.923403+0800 RemoteCamera[5294:3939055] [MultipeerConnection] The multipeer connection failed to start browsing for peers. This could be due to missing keys in your app's Info.plist, check out the documentation at http://github.com/insidegui/MultipeerKit for more information. Error: Error Domain=NSNetServicesErrorDomain Code=-72008 "(null)"
2023-08-24 15:16:45.923508+0800 RemoteCamera[5294:3939055] [MultipeerConnection] The multipeer connection failed to start advertising to peers. This could be due to missing keys in your app's Info.plist, check out the documentation at http://github.com/insidegui/MultipeerKit for more information. Error: Error Domain=NSNetServicesErrorDomain Code=-72008 "(null)"

3.我用MultipeerKit写我自己的demo测试成功

iOS swift 类似AirDrop的近场数据传输 MultipeerConnectivity 框架,swift

3.1 发数据界面

iOS swift 类似AirDrop的近场数据传输 MultipeerConnectivity 框架,swift

3.2 收数据界面

iOS swift 类似AirDrop的近场数据传输 MultipeerConnectivity 框架,swift

3.3 代码

func printXY(_ any:Any,obj:Any,line:Int) {
 #if DEBUG
    let date = Date()
     let timeFormatter = DateFormatter()
     //日期显示格式,可按自己需求显示
     timeFormatter.dateFormat = "HH:mm:ss.SSS"
     let strNowTime = timeFormatter.string(from: date) as String
     print("\(strNowTime) \(type(of: obj)) \(line)\(any)")
  #endif
}



import UIKit
import MultipeerKit
import Combine

struct ExamplePayload: Hashable, Codable {
    let message: String
}


class ViewController: UIViewController{

    private lazy var transceiver: MultipeerTransceiver = {
      var config = MultipeerConfiguration.default
      config.serviceType = "uservc"
     //加了这一句代码availablePeers会自动连接,不加就不会连接,发不了数据
     config.security.encryptionPreference = .required
     
      let t = MultipeerTransceiver(configuration: config)
      
        t.receive(ExamplePayload.self) { [weak self] payload,arg  in
            printXY("收到的数据:\(payload)", obj: self, line: #line)
        self?.receivedDataLabel.text = payload.message
      }
        
      return t
    }()

    @IBOutlet weak var textField: UITextField!
    @IBOutlet weak var receivedDataLabel: UILabel!
    

    var dataSource: MultipeerDataSource!
    var cancellable: AnyCancellable?
    
    override func viewDidLoad() {
        super.viewDidLoad()
       
        
        dataSource = MultipeerDataSource(transceiver: transceiver)
               
               // 订阅 availablePeers 的变化
               cancellable = dataSource.$availablePeers.sink { newPeers in
//                   print("New available peers: \(newPeers)")
                   printXY("New available peers: \(newPeers)", obj: self, line: #line)
                   // 在这里你可以更新 UI,例如刷新一个表视图
               }
        
        transceiver.resume()
    }

    deinit {
        // 取消订阅
        cancellable?.cancel()
    }
  

    @IBAction func connectDevices() {
        
    }

    @IBAction func sendMessage() {

        let payload = ExamplePayload(message: textField.text ?? "123")
        printXY("发送的数据:\(payload)", obj: self, line: #line)

        dataSource.transceiver.send(payload, to: dataSource.availablePeers)
    }






}

相关博客:
MultipeerConnectivity框架详细解析(二) —— 一个简单示例(一) 简书文章来源地址https://www.toymoban.com/news/detail-666111.html

到了这里,关于iOS swift 类似AirDrop的近场数据传输 MultipeerConnectivity 框架的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何通过安全数据传输平台,保护核心数据的安全传输?

    在数字化的浪潮中,企业的数据安全传输显得尤为关键。随着网络攻击手段的日益复杂,传统的数据传输方式已不再安全,这就需要我们重视并采取有效的措施,通过安全数据传输平台来保护核心数据。 传统的数据传输面临的主要问题包括: 1.网络带宽限制:企业的网络带宽

    2024年04月28日
    浏览(45)
  • 数据传输安全不达标:数据传输安全措施未达到行业标准

    引言 近年来随着信息技术的快速发展与普及应用, 企业、政府及个人的信息安全问题日益凸显出来; 其中数据安全是当前网络安全的焦点之一.本文针对数据传输安全问题进行分析并提出相应的解决方法来保障企业、个人等的数据安全性. 数据传输安全的定义和特点 **数据的完

    2024年02月02日
    浏览(58)
  • oracle 19c容器数据库data dump数据泵传输数据(4)---网络传输

    Transporting a Database Over the Network: Example 这个的方式导入可以不需要传输dmp文件,我原本是想从11g导入到pdb2的,但是因为版本的原因,就直接实验从pdb1导入到pdb2吧。 这种方式和前面完全传输的方式类似,不需要事先在目标数据库创建相同的表空间,而且不也不用有导出数据文

    2024年01月18日
    浏览(58)
  • C#蓝牙连接及传输数据的三种方式(蓝牙传输文件、二进制数据)

          先下载InTheHand.Net.Personal.dll并在C#中引用,这个需要在网上下载      先看界面            这种方式优点是稳定性较强,基本无错误,就是偶尔需要提前蓝牙配对。        这种方式直接与蓝牙设备进行配对的时候会报错,请求的地址无效,这时候需要在被检测的蓝牙

    2024年02月11日
    浏览(76)
  • BLE Mesh蓝牙mesh传输大数据包传输文件照片等大数据量通讯

    1、BLE Mesh数据传输现状          BLE Mesh网络技术是低功耗蓝牙的一个进阶版,Mesh扩大了蓝牙在应用中的规模和范围,因为它同时支持超过三万个网络节点,可以跨越大型建筑物,不仅可以使得医疗健康应用更加方便快捷,还能监测像学校这类的大型公共场所随时监测学生的

    2024年02月08日
    浏览(41)
  • 数据通信——传输层TCP(可靠传输原理的ARQ)

    上一篇讲述了停止等待协议的工作流程,在最后提到了ARQ自动请求重传机制。接下来,我们就接着上一篇的篇幅,讲一下ARQ这个机制 还是这个图来镇楼  发送端对出错的数据帧进行重传是自动进行的,因而这种差错控制体制常简称为ARQ(Automatic Repeat reQuest),直译是自动重传请

    2024年02月10日
    浏览(43)
  • FPGA(Verilog)实现uart传输协议传输数据(含仿真)

    目录 实现功能: 1.接收uart串行数据,输出并行数据(1byte)。 2.输入并行数据(1byte),输出uart串行数据。 3.完成uart传输的1次环回。 uart协议的1帧数据传输 模块封装-port设置 Verilog代码实现 1.uart接收模块:接收串行数据,输出并行数据和其有效标志。 仿真结果: 2.uart发送模块:接收

    2024年04月16日
    浏览(45)
  • 如何实现网络数据传输

    目录 前言 1.理解源IP地址和目的IP地址 2.理解端口号 2.1端口号与进程pid的关系 2.2源端口号和目的端口号 3.协议 3.1TCP协议 3.2认识UDP协议 4.网络字节序 5.socket编程接口 总结         在上一篇文章网络框架中给大家对网络的整体进行了一个宏观的介绍,这篇文章中我们进一步来

    2024年02月13日
    浏览(48)
  • 让数据传输更安全

    在阅读RabbitMQ数据传输安全的章节时,提到了ssl协议,用了很大篇幅介绍使用openssl生成一些列秘钥和证书,如果没有相关基础,会不太好理解,本篇就来总结下数据安全相关的概念以及浏览器HTTPS的应用。 通过介绍,你会了解到: 数据安全的基本概念 加密算法 数字证书和证

    2024年02月03日
    浏览(43)
  • TCP可靠数据传输

    TCP的可靠数据传输 1.TCP保证可靠数据传输的方法 TCP主要提供了检验和、序号/确认号、超时重传、最大报文段长度、流量控制等方法实现了可靠数据传输。 检验和 通过检验和的方式,接收端可以检测出来数据是否有差错和异常,假如有差错就会直接丢失该TCP报文段。 序号/确

    2024年02月11日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包