4
我正在努力開發一種方法,從iOS應用程序發現本地網絡上的Logitech Harmony Hub設備。這個概念受到this NODE.JS項目的啓發,該項目似乎將UDP廣播發送到255.255.255.255
地址,然後獲取Logitech的IP地址(這就是我所要做的)。在我的Mac上測試家庭網絡上的NODE.JS項目時,它成功找到了Logitech Harmony Hub。iOS上的UDP廣播/設備發現?
我正在使用CocoaASyncSocket
,並且必須承認,我對UDP廣播/發現如何工作的理解可能會在這裏出現偏差。這是我正在做的事情;
import UIKit
import CocoaAsyncSocket
class ViewController: UIViewController, GCDAsyncUdpSocketDelegate {
var address = "255.255.255.255"
var port:UInt16 = 5224
var socket:GCDAsyncUdpSocket!
var socketReceive:GCDAsyncUdpSocket!
var error : NSError?
override func viewDidLoad() {
super.viewDidLoad()
let message = "_logitech-reverse-bonjour._tcp.local.\n61991".dataUsingEncoding(NSUTF8StringEncoding)
socket = GCDAsyncUdpSocket(delegate: self, delegateQueue: dispatch_get_main_queue())
socket.sendData(message, toHost: address, port: port, withTimeout: 1000, tag: 0)
do {
try socket.bindToPort(port)
} catch {
print(error)
}
do {
try socket.enableBroadcast(true)
} catch {
print(error)
}
do {
try socket.beginReceiving()
} catch {
print(error)
}
}
func udpSocket(sock: GCDAsyncUdpSocket!, didConnectToAddress address: NSData!) {
print("didConnectToAddress");
}
func udpSocket(sock: GCDAsyncUdpSocket!, didNotConnect error: NSError!) {
print("didNotConnect \(error)")
}
func udpSocket(sock: GCDAsyncUdpSocket!, didSendDataWithTag tag: Int) {
print("didSendDataWithTag")
}
func udpSocket(sock: GCDAsyncUdpSocket!, didNotSendDataWithTag tag: Int, dueToError error: NSError!) {
print("didNotSendDataWithTag")
}
func udpSocket(sock: GCDAsyncUdpSocket!, didReceiveData data: NSData!, fromAddress address: NSData!, withFilterContext filterContext: AnyObject!) {
var host: NSString?
var port1: UInt16 = 0
GCDAsyncUdpSocket.getHost(&host, port: &port1, fromAddress: address)
print("From \(host!)")
let gotdata: NSString = NSString(data: data!, encoding: NSUTF8StringEncoding)!
print(gotdata)
}
}
當我編譯這個時,我得到的唯一回應是我剛發出的消息;
didSendDataWithTag
From ::ffff:192.168.1.101
_logitech-reverse-bonjour._tcp.local.
61991
From 192.168.1.101
_logitech-reverse-bonjour._tcp.local.
61991
我擔心,我與這裏的廣播的概念理解問題,我真誠地希望有人也許能夠指出我的資源或有助於理解爲什麼我沒有收到來自任何迴應設備在我的代碼。
謝謝!
感謝您澄清@ Paulw11。這非常有幫助。爲了進一步實現這一點,我是否需要實現某種'socket.connectToHost'函數來監聽指定的主機?我正在研究如何在我的代碼中實現該功能。 – ZbadhabitZ
它不會是'connectToHost',而是一個監聽功能 - Harmony集線器將連接到您的設備 – Paulw11
Thanks @ Paulw11。我的答案是正確的,因爲你的答案明確說明了UDP廣播是如何工作的,儘管請不要冒犯,因爲我可能需要打開另一個關於如何使用CocoaASyncSocket實現你的建議的問題,因爲我還沒有弄清楚如何同時播放和收聽響應。 – ZbadhabitZ