我正在尝试创建一个应用程序,该应用程序能够通过我称之为“真正的”点对点网络在 iOS 设备之间传输大文件,即两个设备直接相互连接而无需中间路由器/wi-网络。我已经确定我有三个高级选项:
1) Apple 的 Multipeer Connectivity 库,它可以发现附近的其他设备,还包括发送 Apple 硬币“资源”又名文件的能力。我的原型显示这个框架在发送大文件(200 MB+)方面很糟糕。速度很少突破 200KB/s 并且不可靠。我见过这个框架最快的速度大约是 1 MB/s。其他人的经历似乎反映了我在网上看到的情况。
2)NSNetService
的发现服务,除了它的轻松抓取NSInputStream
和NSOutputStream
s 的能力。将其与该NSNetServices
includePeerToPeer
属性结合使用,我可以轻松快速地以“真正的”点对点方式连接到设备,并使用这些流通过网络发送数据。这很好,但是处理输入和输出流异常复杂,因为我需要将标头数据(传入文件名、大小、位置等)打包到流中。我在实践中有这个工作,但我对我的实施感到不安,感觉好像我无法涵盖所有的基础。从某种意义上说,我觉得我在这里重新发明了轮子。
3) 我的理想解决方案将使用NSNetService
' 检测和连接到对等方的能力,就像最后一个解决方案一样,但会实施CocoaAsyncSockets
以处理实际的文件传输,允许我使用具有可靠记录的已建立库,这也让我能够逃脱从使用NSInputStream
和NSOutputStream.
我在这里遇到的问题是,虽然 CocoaAsyncSockets 在设备连接到同一网络时工作得很好,但它们无法在真正的对等网络上相互连接,大概是因为它们可以理解地看不到对方正常的以太网接口。看来真正的点对点的东西使用Apple的awdl接口,我在开发者论坛上读到的不能像普通接口一样使用(我尝试在连接套接字时指定该接口,它不起作用)。
我知道这很模糊,但是有人对我有什么建议吗?Apple 开发人员论坛上的一位开发人员在相关主题中提到了一些关于从使用NSNetService
when using提供的套接字创建我自己的套接字的内容publishWithOptions:NSNetServiceListenForConnections
,但他没有提供太多信息,我似乎无法弄清楚这将如何工作.