如何解决MultiPeer连接无法快速连接5
我正在开发一个简单的Tic Tac Toe
游戏。
我正在尝试使用MultipeerConnectivity
将两个设备连接在一起,这是我的代码:
AppDelegate
:
var mpcHandler = MPCHandler()
MPCHandler
:
class MPCHandler: NSObject {
// Variables
var peerID: MCPeerID!
var session: MCSession!
var browser: MCbrowserViewController!
var advertiser: MCAdvertiserAssistant?
// Functions
func setupPeerWithdisplayName (displayName: String) {
self.peerID = MCPeerID(displayName: displayName)
}
func setupSession() {
self.session = MCSession(peer: self.peerID,securityIdentity: nil,encryptionPreference: MCEncryptionPreference.optional)
self.session.delegate = self
}
func setupbrowser() {
self.browser = MCbrowserViewController(serviceType: "TicTacToe",session: self.session)
}
func advertiseSelf(advertise: Bool) {
if advertise {
self.advertiser = MCAdvertiserAssistant(serviceType: "TicTacToe",discoveryInfo: nil,session: self.session)
self.advertiser?.start()
}
else {
self.advertiser?.stop()
self.advertiser = nil
}
}
}
// Extensions
extension MPCHandler: MCSessionDelegate {
func session(_ session: MCSession,peer peerID: MCPeerID,didChange 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)")
}
}
func session(_ session: MCSession,didReceive data: Data,fromPeer peerID: MCPeerID) {
let userInfo: [String : Any] = ["data": data,"peerID:": peerID]
dispatchQueue.main.async {
NotificationCenter.default.post(name: Notification.Name("deviceDidReceiveDatanotification"),object: nil,userInfo: userInfo)
}
}
func session(_ session: MCSession,didReceive stream: InputStream,withName streamName: String,fromPeer peerID: MCPeerID) {
}
func session(_ session: MCSession,didStartReceivingResourceWithName resourceName: String,fromPeer peerID: MCPeerID,with progress: Progress) {
}
func session(_ session: MCSession,didFinishReceivingResourceWithName resourceName: String,at localURL: URL?,withError error: Error?) {
}
}
MainVC
:
var appDelegate: AppDelegate?
// Overridden Functions
override func viewDidLoad() {
super.viewDidLoad()
self.appDelegate = UIApplication.shared.delegate as? AppDelegate
self.appDelegate?.mpcHandler.setupPeerWithdisplayName(displayName: UIDevice.current.name)
self.appDelegate?.mpcHandler.setupSession()
self.appDelegate?.mpcHandler.advertiseSelf(advertise: true)
}
@IBAction func barButtonpressed(_ sender: UIBarButtonItem) {
if self.appDelegate?.mpcHandler.session != nil {
self.appDelegate?.mpcHandler.setupbrowser()
self.appDelegate?.mpcHandler.browser.delegate = self
self.present(self.appDelegate?.mpcHandler.browser ?? UIViewController(),animated: true,completion: nil)
}
}
Info.plist
:
为Bonjour Services
添加了_TicTacToe._tcp
和_TicTacToe._udp
在调试时,这些设备会找到彼此,但是在尝试连接时,连接的设备会陷入Connecting
状态,而另一台设备则不会收到批准连接的通知。
几秒钟后,它表明连接被拒绝。
问题可能是什么?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。