6

iOS アプリから、ローカル ネットワーク上の Logitech Harmony Hub デバイスを検出する方法を開発しようとしています。このコンセプトは、このNODE.JS プロジェクトに触発されています。このプロジェクトは、UDP ブロードキャストを255.255.255.255アドレスに送信し、Logitech の IP アドレスを取得するようです (これがすべてです)。Mac からホーム ネットワーク上の NODE.JS プロジェクトをテストすると、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

ここでのブロードキャストの概念を理解するのに問題があるのではないかと心配しており、誰かが私にリソースを教えてくれるか、私のコードでデバイスから応答が得られない理由を理解するのに役立つことを心から願っています.

ありがとう!

4

1 に答える 1