iOS 9.3 Xcode 7.3无法使用多个EER连接

iOS 9.3 Xcode 7.3无法使用多个EER连接,ios,objective-c,iphone,swift,Ios,Objective C,Iphone,Swift,我一直在使用此代码建立正确的连接。我试过iPhone模拟器和物理设备。我无法正确连接它。如中所示,它将其状态显示为“连接…”,并直接进入“未连接”状态。我已经探索了很多,没有找到任何有用的方法来解决这个问题。我还在苹果开发者论坛上读到一些问题,很多人都面临着同样的问题。但目前还没有合适的解决方案。请检查代码。先谢谢你 import UIKit import MultipeerConnectivity //MARK: MCNearbyServiceAdvertiserDelegate exte

我一直在使用此代码建立正确的连接。我试过iPhone模拟器和物理设备。我无法正确连接它。如中所示,它将其状态显示为“连接…”,并直接进入“未连接”状态。我已经探索了很多,没有找到任何有用的方法来解决这个问题。我还在苹果开发者论坛上读到一些问题,很多人都面临着同样的问题。但目前还没有合适的解决方案。请检查代码。先谢谢你

import UIKit
import MultipeerConnectivity

//MARK: MCNearbyServiceAdvertiserDelegate

extension ViewController : MCNearbyServiceAdvertiserDelegate
{
    // Incoming invitation request.  Call the invitationHandler block with YES
    // and a valid session to connect the inviting peer to the session.

    func advertiser(advertiser: MCNearbyServiceAdvertiser, didReceiveInvitationFromPeer peerID: MCPeerID, withContext context: NSData?, invitationHandler: (Bool, MCSession) -> Void)
    {
        invitationHandler(true, self.session) // Accepting an invitation
        //  self.serviceBrowser.stopBrowsingForPeers()
    }

    // Advertising did not start due to an error.

    func advertiser(advertiser: MCNearbyServiceAdvertiser, didNotStartAdvertisingPeer error: NSError)
    {
        print("\(error.localizedDescription)")
    }
}

//MARK: MCNearbyServiceBrowserDelegate

extension ViewController : MCNearbyServiceBrowserDelegate
{
    // Found a nearby advertising peer.

    func browser(browser: MCNearbyServiceBrowser, foundPeer peerID: MCPeerID, withDiscoveryInfo info: [String : String]?)
    {
        browser.invitePeer(peerID, toSession: self.session, withContext: nil, timeout: 10) // Inviting a peer to connect to my session
        // self.serviceAdvertiser.stopAdvertisingPeer()
    }

    // A nearby peer has stopped advertising.

    func browser(browser: MCNearbyServiceBrowser, lostPeer peerID: MCPeerID)
    {
        print("Lost")
    }

    // Browsing did not start due to an error.

    func browser(browser: MCNearbyServiceBrowser, didNotStartBrowsingForPeers error: NSError)
    {
        print("\(error.localizedDescription)")
    }
}

//MARK: MCSessionDelegate

extension ViewController : MCSessionDelegate
{
    // Remote peer changed state.

    func session(session: MCSession, peer peerID: MCPeerID, didChangeState state: MCSessionState)
    {
        switch state
        {

        case MCSessionState.Connected:
            print("Connected: \(peerID.displayName)")

        case MCSessionState.Connecting:
            print("Connecting: \(peerID.displayName)")

        case MCSessionState.NotConnected:
            print("Not Connected: \(peerID.displayName)")
        }
    }

    // Received data from remote peer.

    func session(session: MCSession, didReceiveData data: NSData, fromPeer peerID: MCPeerID)
    {
        dispatch_async(dispatch_get_main_queue()) {

            let str = NSString(data: data, encoding: NSUTF8StringEncoding) as! String
            print("Value recieved : \(str)")
        }

    }

    // Received a byte stream from remote peer.

    func session(session: MCSession, didReceiveStream stream: NSInputStream, withName streamName: String, fromPeer peerID: MCPeerID)
    {

    }

    // Start receiving a resource from remote peer.

    func session(session: MCSession, didStartReceivingResourceWithName resourceName: String, fromPeer peerID: MCPeerID, withProgress progress: NSProgress)
    {

    }

    // Finished receiving a resource from remote peer and saved the content
    // in a temporary location - the app is responsible for moving the file
    // to a permanent location within its sandbox.

    func session(session: MCSession, didFinishReceivingResourceWithName resourceName: String, fromPeer peerID: MCPeerID, atURL localURL: NSURL, withError error: NSError?)
    {

    }

    // Made first contact with peer and have identity information about the
    // remote peer (certificate may be nil).

    func session(session: MCSession, didReceiveCertificate certificate: [AnyObject]?, fromPeer peerID: MCPeerID, certificateHandler: (Bool) -> Void)
    {

    }
}

//MARK: ViewController

class ViewController: UIViewController {

    // View Did Load

    override func viewDidLoad() {
        super.viewDidLoad()

        self.start()
    }

    // User clicked on a button, send value alvin to all connected devices

    @IBAction func helloclicked(sender: UIButton)
    {
        self.sendValuesToPeer("alvin")
    }


    private enum EHRServiceType : String
    {
        case Update = "HelloUpdate"
    }

    var myOwnPeerId : MCPeerID!

    // Browser

    var advertiserAssistant : MCAdvertiserAssistant!

    // For finding the devices

    var serviceAdvertiser : MCNearbyServiceAdvertiser!

    // For listening to devices

    var serviceBrowser : MCNearbyServiceBrowser!

    // Session

    // var session : MCSession!

    lazy var session : MCSession = {

            let session = MCSession(peer: self.myOwnPeerId, securityIdentity: nil, encryptionPreference: MCEncryptionPreference.Optional)
            session.delegate = self
            return session

    }()

    func start() {

        self.myOwnPeerId = MCPeerID(displayName: "Alvin \(UIDevice.currentDevice().name)")

        // Advertising

        self.serviceAdvertiser = MCNearbyServiceAdvertiser(peer: self.myOwnPeerId, discoveryInfo: nil, serviceType: EHRServiceType.Update.rawValue)

        // Browsing

        self.serviceBrowser = MCNearbyServiceBrowser(peer: self.myOwnPeerId, serviceType: EHRServiceType.Update.rawValue)

        self.advertiserAssistant = MCAdvertiserAssistant(serviceType: EHRServiceType.Update.rawValue, discoveryInfo: nil, session: self.session)

        // Session

        // self.session = MCSession(peer: self.myOwnPeerId, securityIdentity: nil, encryptionPreference: MCEncryptionPreference.Required)

        // Session

        // self.session.delegate = self

        // Browsing

        self.serviceBrowser.delegate = self
        self.serviceBrowser.startBrowsingForPeers() // Starting browsing...

        // Avertising

        self.serviceAdvertiser.delegate = self
        self.serviceAdvertiser.startAdvertisingPeer() // Starting advertising...

        self.advertiserAssistant.start()

    }

    override func viewDidAppear(animated: Bool) {

        // let browser = MCBrowserViewController(browser: self.serviceBrowser, session: self.session)

        // self.presentViewController(browser, animated: true, completion: nil)
    }

    //MARK: Send values to peer

    func sendValuesToPeer(name : String)
    {
        if self.session.connectedPeers.count > 0
        {
            let value =  name.dataUsingEncoding(NSUTF8StringEncoding)

            do
            {
                try self.session.sendData(value!, toPeers: self.session.connectedPeers, withMode: MCSessionSendDataMode.Reliable)
            }
            catch
            {

            }

        }
        else
        {
            print("No peers")
        }
    }
}

我也尝试过很多情况,比如没有加密,有加密,有相同的项目目标(在两台计算机上使用iPhone模拟器),在查找设备时停止广告,在收到邀请时停止浏览。但这些选择都没有解决我的问题,它仍然在“连接…”中,直接转到“未连接”。请告诉我您的想法。

首先检查您是否在同一个wifi网络中

但别忘了Bulutoth在模拟器中不工作

此外,设备和模拟器完全正常。我和倍增器一起工作了几个月。我注意到,只有当两个设备/对等设备都位于不同的wifi/蓝牙网络时,才处于连接-断开连接状态

如果这些都可以的话。然后