iOS 7:通过 wi-fi 或对等 wi-fi 使用 Multipeer Connectivity 连接设备

Posted

技术标签:

【中文标题】iOS 7:通过 wi-fi 或对等 wi-fi 使用 Multipeer Connectivity 连接设备【英文标题】:iOS 7 : Connecting devices using Multipeer Connectivity via wi-fi or peer to peer wi-fi 【发布时间】:2014-01-27 13:37:54 【问题描述】:

我正在尝试通过 ios 7 中的 Multipeer 连接框架连接 2 个 iOS 7 设备。 我可以使用蓝牙连接它们。在代码中我没有提到蓝牙之类的东西。

Multipeer Documentation

Multipeer Connectivity 框架支持使用基础设施 Wi-Fi 网络、对等 Wi-Fi 和蓝牙个人区域网络发现附近 iOS 设备提供的服务,然后通过发送基于消息的数据与这些服务进行通信、流数据和资源(例如文件)。

如果我关闭了其中一台设备的蓝牙,它就会停止工作。

因为,蓝牙范围很慢,我需要大面积覆盖。那么,告诉我如何通过 Wi-Fi 或点对点 wi-fi 连接两台设备?

代码:.h 文件

@interface SessionManager : NSObject <MCSessionDelegate, MCAdvertiserAssistantDelegate, MCBrowserViewControllerDelegate>

// current peer
@property (nonatomic, readonly) MCPeerID *myPeer ;

// current session
@property (nonatomic, readonly) MCSession *session;

// current advertise
@property (nonatomic, readonly) MCAdvertiserAssistant *advertiser ;

// current browser
@property (nonatomic, readonly) MCBrowserViewController *browser ;

//To start advertising current device
- (void)start;

//To stop advertising current device
- (void)stop;

@end

.m 文件:

- (id)init

    self = [super init];

    if (self)
    
        _myPeer = [[MCPeerID alloc] initWithDisplayName:[[UIDevice currentDevice] name]];

        _session = [[MCSession alloc] initWithPeer:_myPeer securityIdentity:nil encryptionPreference:MCEncryptionNone];
        _session.delegate = self;

        _advertiser = [[MCAdvertiserAssistant alloc] initWithServiceType:@"Connect" discoveryInfo:nil session:_session];
        _advertiser.delegate = self;

        _browser = [[MCBrowserViewController alloc] initWithServiceType:@"Connect" session:_session];
        _browser.delegate = self;
    

    return self;


 - (void)start
 
    [_advertiser start];
 

感谢任何帮助。

【问题讨论】:

【参考方案1】:

MultipeerConnectivity 提供远离基础设施 Wi-Fi、P2P 和蓝牙的抽象。这意味着您的设备将相互通信,但它们有能力。

如果您可以通过蓝牙连接两台设备,那么它们也可以通过基础设施 wifi 连接,前提是它们位于同一个 LAN 上,没有任何限制(因此,如果您在一家大公司,您可能会遇到一些问题,因为IT)。

MPC 允许您与通过完全不同的传输连接的多个设备进行通信。所以如果 A、B、C 都是可以使用你指定的 UUID 发现和连接的设备,A 只开启蓝牙,B 开启蓝牙和 wifi,C 只开启 wifi,那么 A 将自动能够接收来自 C 的消息,因为 B 负责完成环。

MultipeerConnectivity 已经提供了所有这些功能。

有关如何正确发现、连接和与对等点通信的演练,请查看 wwdc 视频“具有多对等点连接的附近网络”here

【讨论】:

我已经看过这个视频并且只使用它实现了代码......但我想使用 wifi 连接设备以拥有大量连接 如果您观看了此视频,那么您已经可以通过 wifi 连接,只需确保设备在同一个 LAN 上并且都启用了 wifi。您可以关闭蓝牙以确保安全。需要明确的是,据我了解,无法指定通过蓝牙或 WiFi 进行连接,它只是随心所欲地连接【参考方案2】:

检查的答案是错误的,因为框架不是在局域网上运行的,而是一个较低的级别,直接访问蓝牙或 WI-FI。换句话说,您不需要在同一个网络上使用相同的 SSID,只需打开 WI-FI 即可。让两台设备都从 LAN 中注销,例如关闭路由器和蓝牙,您会注意到它们仍然可以连接。但是,从某种意义上说,您不能深入告诉框架直接使用蓝牙或 WI-FI,这在一定程度上是正确的,因为 Apple 决定为我们自动化这部分。

【讨论】:

以上是关于iOS 7:通过 wi-fi 或对等 wi-fi 使用 Multipeer Connectivity 连接设备的主要内容,如果未能解决你的问题,请参考以下文章

Wi-Fi与蓝牙对等连接

通过Wi-Fi 7实现极高吞吐量——洞察下一代Wi-Fi物理层

Multipeer Connectivity Framework (iOS7) 如何在附近没有 Wi-Fi 路由器且蓝牙接口关闭的情况下使用?

当 Wi-Fi Direct 范围内的对等点不再可用时,如何通知?

通过Wi-Fi 7实现极高吞吐量——洞察下一代Wi-Fi物理层

Android Wi-Fi Direct P2P 连接多个设备