从 MCSession 断开单个对等点?

Posted

技术标签:

【中文标题】从 MCSession 断开单个对等点?【英文标题】:Disconnect individual peers from MCSession? 【发布时间】:2014-05-02 19:41:16 【问题描述】:

如果我有一组已连接的对等点,假设为 3 (a->b, a->c, a->d) 我只想断开对等“c”的连接,我该怎么办?

我看到一个对类似问题状态的回复,即您只能断开“您自己”与会话的连接:这意味着在上述情况下,如果我这样做:

[mySession disconnect];

我都在同时断开“a”与“b”、“c”和“d”的连接。 所以建议是向您要断开连接的对等方(“c”)发送通知,并告诉它从会话中断开连接。

但是,我也看到了这个,想知道它是否符合我的要求 - 仅删除特定的对等点:

[mySession.connectedPeers[0] disconnect];

编辑:我刚刚意识到这是一个只读属性,所以忽略这部分。

或者还有另一种可能更好的方法来删除特定对等点?

【问题讨论】:

【参考方案1】:

每个点对点连接都由一个 MCSession 实例表示。 因此,在您的示例中,您将拥有 3 个指向 MCSession 对象的 UNIQUE 指针:

MCSession *p1 = a->b
MCSession *p2 = a->c
MCSession *p3 = a->d

所以要断开对等体 c 的连接,您将:

[p2 disconnect]; // release the session
p2 = nil; // release the resource

当然,您可以将会话存储在可变数组中,然后执行相同的逻辑,但使用数组中的指针

p2 = (MCSession *)[array objectAtIndex:1];
[p2 disconnect];
[array removeObjectAtIndex:1];

【讨论】:

那时我一定很困惑——我的印象是一个“会话”实例可以连接多个对等点,正如我在问题中所展示的那样。你是说每个会话只能有一个对等点,并且必须保留一组会话,每个会话只有一个对等点? 一点也不。在您的问题中,您刚刚说您有一系列连接的对等点 - 而不是您如何连接它们。您可以在单个会话中拥有多个对等点(最多 8 个),或者在我的情况下,由于框架当前不稳定状态的解决方法,我将每个会话保持对等点之间的 1:1 关系。 AFAIK 当您“断开连接”时,您是在告诉 MPC 您在该会话中连接到的所有对等方都需要断开连接。如果您想要更好的粒度,请采用 1:1 方法 似乎是合理的,特别是因为当多个在单个会话上时似乎没有办法断开特定对等点。谢谢。既然我已经接受了你的回答,让我们看看是否有人不同意......

以上是关于从 MCSession 断开单个对等点?的主要内容,如果未能解决你的问题,请参考以下文章

在 MCSession 中设置最大对等点

多点连接 - 以编程方式断开对等点

当应用程序从后台返回到前台时,MCSession 无法重新连接

wifi-direct端连接到Android上的对等点?

为 MCSession 授权证书

在 iOS 模拟器和设备之间使用 MCSession 发送文件