多点连接:列出所有附近的会话

Posted

技术标签:

【中文标题】多点连接:列出所有附近的会话【英文标题】:Multipeer Connectivity :List all nearby sessions 【发布时间】:2014-11-11 06:39:14 【问题描述】:

我正在 ios 7 中进行 Multipeer 连接,它运行良好。但我需要的是,当我按下搜索按钮时,它需要显示所有附近的会话(不是附近的设备)。有没有可能的解决方案。请帮忙!!!

【问题讨论】:

Multipeer Connectivity教程appcoda.com/… @SureshThoutam 我之前已经浏览过这个链接。它只是展示了多对等体的工作原理。关于我上面的问题,我需要很多内部细节。感谢您的支持。 【参考方案1】:

您没有说明为什么要在对等点之间传递MCSession 对象,但是一旦您有两个连接的对等点,您就可以使用其中一个 MCSession 数据在对等点之间传递符合NSCoding 协议的任何对象发送方式如

- (BOOL)sendData:(NSData *)data toPeers:(NSArray *)peerIDs withMode:(MCSessionSendDataMode)mode error:(NSError **)error

但是 MCSession 不符合 NSCoding,因此最好在对等点之间从 MCSession 发送元数据。因此,如果 Peer A 和 Peer B 已连接,并且 Peer A 想知道 Peer B 连接到了哪些其他 Peer,则 Peer B 可以发送一个 NSString 对象数组,列出每个 Peer 的 displayName

但即使您这样做了,如果对等点 A 没有发现(或被)对等点 B 的连接对等点,那么您无论如何也无法与它们通信。您正在寻找在对等点之间发送 MCSession 对象的方法这一事实意味着可能有更好的方法来解决您想要实现的目标。

tl;dr

MCSession 处理对等点之间的连接。对等点首先需要连接才能共享他们的 MCSession 对象。

【讨论】:

【参考方案2】:

您不能发布MCSession,而是使用多个MCNearbyServiceBrowser 对象和MCNearbyServiceAdvertiser 对象来浏览和发布多种服务类型。

当您使用initWithPeer:discoveryInfo:serviceType: 初始化MCNearbyServiceAdvertiser 时 将您的服务名称(服务类型)放在发现信息中,以便当您在MCNearbyServiceBrowserDelegatebrowser:foundPeer:withDiscoveryInfo: 中被MCNearbyServiceBrowser(浏览相同的服务类型)找到时,您可以确定服务类型并在 UI 中显示。

这样,同一个对等点会以不同的服务类型出现多次。您可以选择所需的服务类型以继续。 我建议您为每种服务类型使用单独的MCSession。 为此,您需要仔细维护所有浏览器和广告商对象。

希望对你有帮助。

【讨论】:

以上是关于多点连接:列出所有附近的会话的主要内容,如果未能解决你的问题,请参考以下文章

蓝牙连接立即断开多点框架

iOS7 中的多点连接会话

切换 VC 后多点连接会话断开

iOS 7:多点连接 - 多个会话?

xcode 8 swift 3 中多点连接框架中对成员“会话(_:peer:didChange)”错误的模糊引用

为啥多点连接如此缓慢?