mac开发系列19:苹果设备之间利用Multipeer Conn

2017-08-14  本文已影响51人  悲观患者

1、基本原理:

Multipeer Connectivity是一个框架,用于苹果设备发现其他近场的苹果设备,以及苹果设备之间基于消息数据,流数据和资源数据的通信。对于iOS设备,底层数据传输是利用日常的WiFi网络,点对点wifi(也叫直连wifi,即不需要走路由器)和蓝牙;对于macOS和tvOS设备,则是利用日常wifi,点对点wifi以及以太网。

2、代码实现:

1)利用设备名初始化设备的peer id:

m_localPeerID = [[MCPeerID alloc] initWithDisplayName:[[MMDevice currentDevice] GetDeviceName]];

2)一个peer广播(advertise)自己的信息给近场的其他peer:

// discoveryInfo: 标识广播peer的身份,用于被其他peer发现时,进行校验m_advertiser = [[MCNearbyServiceAdvertiser alloc] initWithPeer:m_localPeerID discoveryInfo:discoveryInfo serviceType:serviceType];
m_advertiser.delegate = self; // 因为要使用MCNearbyServiceAdvertiseDelegate的方法
[m_advertiser startAdvertisingPeer];

3)另一个peer扫描自己所需的peer:

m_browser = [[MCNearbyServiceBrowser alloc] initWithPeer:m_localPeerID serviceType:serviceType];
m_browser.delegate = self; // 因为要使用MCNearbyServiceBrowserDelegate的方法[m_browser startBrowsingForPeers];

创建连接session,并邀请广播peer加入连接session:

// 找到一个广播peer- (void)browser:(MCNearbyServiceBrowser *)browser
foundPeer:(MCPeerID *)peerID
withDiscoveryInfo:(nullable NSDictionary<NSString *, NSString *> *)info
{
if(info是所需广播peer的discoveryInfo) {// 扫描peer用自己的peer id创建一个连接sessionm_clientSession = [[MCSession alloc] initWithPeer:m_localPeerID securityIdentity:nil encryptionPreference:MCEncryptionNone];m_clientSession.delegate = self; // 因为要使用MCSessionDelegate的方法// 设置context,以便广播peer收到邀请时,进行校验context = 双方事先商定好的校验信息:answerInfo;// 邀请广播peer加入连接session [browser invitePeer:peerID toSession:m_clientSession withContext:context timeout:30];// 停止扫描[browser stopBrowsingForPeers];}
}

5)广播peer收到扫描peer的“加入连接session”邀请:

6)监听连接session的状态变化:

7)双方peer成功加入连接会话后,进行数据收发:

// 向目标peer发数据[session sendData:data toPeers:@[targetPeerID] withMode:MCSessionSendDataReliable error:&error];// 收到数据- (void)session:(MCSession *)session didReceiveData:(NSData *)data fromPeer:(MCPeerID *)peerID{ // 校验是否是目标peerID if(peerID is targetPeerID) { }}

备注:当然,利用Multipeer Connectivity实现数据传输的方式不止以上这一种,详情可以参考下面的官方文档。

官方文档链接:

[https://developer.apple.com/reference/multipeerconnectivity

](https://developer.apple.com/reference/multipeerconnectivity)

上一篇 下一篇

猜你喜欢

热点阅读