标签: multipeer-connectivity

为什么我的MCSession对等端会随机断开连接?

我使用MCNearbyServiceBrowser和MCNearbyServiceAdvertiser将两个对等体连接到MCSession.我可以使用MCSession的sendData方法在它们之间发送数据.所有似乎都按预期工作,直到我随机(并且不是由于我控制的任何事件)通过会话的MCSessionDelegate didChangeState处理程序接收MCSessionStateNotConnected.此外,MCSession的connectedPeers数组不再拥有我的同行.

两个问题:为什么?以及如何防止MCSession断开连接?

objective-c ios7 multipeer-connectivity

40
推荐指数
3
解决办法
1万
查看次数

iOS 7 Multipeer Connectivity是否与Android Wi-Fi Direct兼容?

我一直在关注iOS 7的新P2P网络框架,MultipeerConnectivity,从描述中,我觉得它使用了某种Wi-Fi Direct技术和蓝牙PAN的组合.

此框架中的Wi-Fi Direct技术是否与Android的Wi-Fi Direct兼容?这个框架实际上可以用于跨平台的P2P网络吗?

android bluetooth ios wifi-direct multipeer-connectivity

34
推荐指数
2
解决办法
3万
查看次数

重新连接到断开连接的对等体

我在我的应用程序中使用iOS 7 Multipeer框架,但我遇到设备断开连接的问题.如果我在两个设备中打开应用程序:设备A和设备B,这两个设备会自动相互连接.但是,几秒钟后,设备A断开与设备B的连接.即,首先连接是这样的:

A ---> B
A <--- B
Run Code Online (Sandbox Code Playgroud)

几秒钟后:

A ---> B
A      B
Run Code Online (Sandbox Code Playgroud)

设备A维护它的连接,但设备B得到一个MCSessionStateNotConnected.

这意味着A可以向B发送数据但B无法回复.我试图通过检查设备是否已连接来解决这个问题,如果不是,请使用以下命令重新启动连接:

[browser invitePeer:peerID toSession:_session withContext:Nil timeout:10];
Run Code Online (Sandbox Code Playgroud)

但是,使用MCSessionStateNotConnected调用didChangeState回调.

奇怪的是,如果我将应用程序A发送到后台,然后重新打开它,B重新连接到它并保持连接.

Multipeer API(和文档)看起来有点稀疏,所以我假设它会起作用.在这种情况下,我应该如何重新连接设备?

iphone bluetooth ios multipeer-connectivity

30
推荐指数
3
解决办法
9959
查看次数

点对点Android和iOS与Wifi直接(多重连接?)

好吧,我正在研究这个应用程序在Android和iOS之间发送数据,我让它在iOS设备与Apple的Multipeer Connectivity框架之间工作,但我目前想知道你是如何在两个平台之间实现它的?即使你愿意从头开始写它.

为什么Firechat能够做到这一点?我记得,您可以使用他们的应用程序在两个平台之间交换数据.

编辑:https://www.opengarden.com/meshkit.html似乎Firechat中使用的MeshKit SDK现在可用(适用于大型组织).

android ios multipeer-connectivity

22
推荐指数
2
解决办法
2万
查看次数

在tvOS应用程序中使用iPhone作为游戏控制器?

在Apple TV宣布期间,Crossy Road的开发人员使用iPhone作为Apple电视游戏的第二控制器:

http://www.macrumors.com/2015/09/09/cooperative-play-for-crossy-road/

我的第一个想法是使用Multipeer Connectivity Framework实现这一点.但是,它不支持tvOS.有没有一种很好的方法可以在没有Multipeer Connectivity的情况下将iPhone连接到Apple TV?

更新:似乎我不能使用GameKit,因为GKPeerPickerController已从tvOS上的GameKit中删除.

objective-c ios apple-tv multipeer-connectivity tvos

21
推荐指数
3
解决办法
4669
查看次数

iOS中通过wifi的点对点网络

我已经在这几天了,似乎无法找到解决方案.我想在iOS上通过wifi创建点对点网络.所有开源代码似乎都支持运行服务器或作为客户端,但是没有构建代码来支持两者兼作 - 一个对等体.有人知道我可以这样做吗?

iphone networking peer ios multipeer-connectivity

19
推荐指数
2
解决办法
3万
查看次数

多种连接框架:稳定性和建议

我正在开发一个使用MC框架作为沟通渠道的项目,经过一些测试后,我认为这个渠道在某种程度上不稳定而无法依赖.

我一直在关注Apple的文档和视频,以便正确使用框架,但碰巧:

  • 同伴们经常在配对后断开连接,如果我配对一个以上的同伴,则会更加失败.
  • 一些数据包具有混合数据

是否有任何建议与框架一起使用?即:

  • 具体项目设置?(即:功能部分中是否有需要启用的东西?)
  • 多线程限制?(即:始终从同一个线程调用mc方法)
  • 要发送的数据量有限制吗?

我发现这个链接提到了一些关于框架在压力下表现不佳的事情.那是我正在寻找的那种建议:).

作为记录:

  • 我正在使用基于帖子的实现,因为Apple的项目对我不起作用.
  • MCSession对于我尝试配对的所有同伴,我只使用一个
  • 加密首选项设置为 MCEncryptionNone
  • 使用sendData:sendResourceAtURL:与同行沟通.

ios multipeer-connectivity

14
推荐指数
1
解决办法
1577
查看次数

多重连接框架 - 丢失的对等体停留在会话中

我想知道这个Multipeer Connectivity框架是否可以在现实世界中使用,考虑到社区遇到的所有错误.我认为我的设置正确,但我尝试过的所有其他示例项目都遇到了类似的问题.

我遇到的问题可能与Bonjour固有的某些问题有关,我无法弄清楚,但基本上问题如下:

  • MCSession和很多同行都很活跃.
  • 现在,如果设备在会话中,然后强制退出,则"Peer"将无限期地保持连接状态.
  • 即使browser:lostPeer:为该对等方调用该方法并且不再在浏览器中显示为"附近" ,我也无法强制该用户离开.
  • session:peer:didChangeState:不为该对等方调用该方法.
  • 当强制退出的同伴回到应用程序时,它们再次被"发现",browser:foundPeer:withDiscoveryInfo:但仍然存在于session.connectedPeersNSArray中.显然,他们仍然没有收到有关会话的任何数据或更新,实际上并没有连接.
  • 似乎唯一能够将原始对等体注册MCSessionStateNotConnected到会话的方法是将该对等体重新连接到原始会话.然后session:peer:didChangeState:对peerID的新实例所在的位置进行重复调用,并且在peerID MCSessionStateConnected的旧实例调用之后不久MCSessionStateNotConnected.

示例聊天应用程序很好地演示了这个问题:https://developer.apple.com/library/ios/samplecode/MultipeerGroupChat/Introduction/Intro.html

由于似乎没有任何方法可以手动强制从会话中删除对等体,我该怎么办?我应该尝试以某种方式重建会话吗?

这个框架看起来有点混乱,但我试图保留判断力!

session ios multipeer-connectivity

13
推荐指数
1
解决办法
8805
查看次数

连接和中继如何在MCSession中工作?

Multipeer连接框架文件是有点欠缺.下面我有几个关于连接和中继的问题.

为了方便起见,我为每个问题创建了一个图像.传说如下:

在此输入图像描述

对于每个问题,请记住以下几点:

  • 如果我禁用蓝牙,答案会改变吗?
  • 如果我禁用wi-fi,答案会改变吗?
  • 如果我从同一个Wi-Fi网络断开连接,答案会改变吗?

1.如果连接到一个对等体,是否与其他对等体连接?

假设1和2连接到会话.

如果1和3连接,2和3连接?

在此输入图像描述


2.如果您已经与同伴进行了自己的会话怎么办?

假设1和2连接到会话,3和4连接到不同的会话.

如果1和3连接,那么所有对等体是否相互连接?(例如,2和4连接?)

在此输入图像描述


3.如果两个连接的设备不在范围内会发生什么?

假设1,2和3全部连接并且在彼此的范围内.

如果3超出1的范围(但仍然在2的范围内),1和3是否断开连接?

注意:对于这个问题,假设他们使用设备到设备通信,而不是集中式Wi-Fi.

3B.如果不是,这是否意味着1发送到3的每条消息都通过2传递,或者3只是没有得到任何消息?

在此输入图像描述


4.如果启动连接并且某些设备不在彼此的范围内,该怎么办?

假设1和2是在彼此的范围内,2和3是在彼此的范围内,但图1和3超出彼此的范围内.假设1和2连接到会话,但3不连接.

如果3连接到2,它也会连接到1吗?

在此输入图像描述


广告是否也通过同行传播?

同样,1和2在范围内,2和3在范围内,但1和3在范围之外.

如果1广告其服务,将3看到它(例如通过它通过对等2中继)?

5B.如果2也是广告,这会改变上述问题的答案吗?即3将看到1的广告?

在此输入图像描述


6.浏览器怎么样,它们是通过同行转发的吗?

同样,1和2在范围内,2和3在范围内,但1和3在范围之外.

如果3广告其服务,将1看到它(例如通过它通过对等2中继)?

6B.如果2也在浏览,这会改变上述问题的答案吗?即1将看到3的广告?

在此输入图像描述

ios multipeer-connectivity mcsession

12
推荐指数
0
解决办法
166
查看次数

swift 3.0 TViOS 10.0 MultipeerConnectivity有效,但有错误

使用此代码在TViOS 10.0下设置Multipeer连接.

import UIKit
import MultipeerConnectivity

class MPCHandler: NSObject, MCSessionDelegate {

var peerID: MCPeerID!
var session: MCSession!
var browser: MCBrowserViewController!
var advertiser: MCAdvertiserAssistant? = nil

func setupPeerWithDisplayName (displayName: String) {
    peerID = MCPeerID(displayName: UIDevice.current.name)
}

func setupSession() {
    session = MCSession(peer: peerID)
    session.delegate = self
}

func setupBrowser() {
    browser = MCBrowserViewController(serviceType: "my-game", session: session)
}

func advertiseSelf(advertise:Bool) {
    if advertise {
        advertiser = MCAdvertiserAssistant(serviceType: "my-game", discoveryInfo: nil, session: session)
        advertiser!.start()
    } else {
        advertiser!.stop()
        advertiser = nil
    }
} …
Run Code Online (Sandbox Code Playgroud)

television multipeer-connectivity swift3

12
推荐指数
2
解决办法
5564
查看次数