Я работаю над разработкой средства обнаружения устройств Logitech Harmony Hub в моей локальной сети из приложения для iOS. Эта концепция основана на этом проекте NODE.JS, который кажется отправьте широковещательную рассылку UDP на адрес 255.255.255.255
, а затем получите IP-адрес Logitech (это все, что мне нужно). При тестировании проекта NODE.JS в моей домашней сети с моего Mac он успешно находит Logitech Harmony Hub.
Я использую 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
Я боюсь, что у меня есть концептуальная проблема с пониманием трансляции здесь, и я искренне надеюсь, что кто-то сможет указать мне на ресурс или помочь понять, почему я не получаю никакого ответа от устройства в моем коде.
Спасибо!