Ios 无法通过UPNP请求从Wemo设备接收数据

Ios 无法通过UPNP请求从Wemo设备接收数据,ios,swift,upnp,gcdasyncudpsocket,Ios,Swift,Upnp,Gcdasyncudpsocket,我的本地网络中有Wemo belkin设备,我正在通过upnp呼叫发送数据,但我无法从Wemo设备接收响应。 这是我的密码: class PluginBelkinViewController: UIViewController, GCDAsyncSocketDelegate, GCDAsyncUdpSocketDelegate { let ssdpAddres = "239.255.255.250" let ssdpPort:UInt16 = 1900 var ssdpS

我的本地网络中有Wemo belkin设备,我正在通过upnp呼叫发送数据,但我无法从Wemo设备接收响应。 这是我的密码:

class PluginBelkinViewController: UIViewController, GCDAsyncSocketDelegate, GCDAsyncUdpSocketDelegate {
    let ssdpAddres = "239.255.255.250"
    let ssdpPort:UInt16 = 1900
    var ssdpSocket:GCDAsyncUdpSocket!
    var ssdpSocketRec:GCDAsyncUdpSocket!
    var error: NSError?

    @IBAction func nextPressed(sender: UIButton) {
        let mSearchData = "M-SEARCH * HTTP/1.1\r\nHOST: \(ssdpAddres):\(ssdpPort)\r\nMAN: \"ssdp:discover\"\r\nMX: 5\r\nST: urn:Belkin:device\r\n\r\n".dataUsingEncoding(NSUTF8StringEncoding)!
        do {
            ssdpSocket = GCDAsyncUdpSocket(delegate: self, delegateQueue: dispatch_get_main_queue())
            ssdpSocket.sendData(mSearchData, toHost: ssdpAddres, port: ssdpPort, withTimeout: 5000, tag: 0)
            try ssdpSocket.bindToPort(ssdpPort)
            try ssdpSocket.joinMulticastGroup(ssdpAddres)
            try ssdpSocket.beginReceiving()
        } catch {
            print(error)
        }

        let otherSocket = GCDAsyncSocket(delegate: self, delegateQueue: dispatch_get_main_queue())

        do {
            try otherSocket.acceptOnPort(8901)
        } catch {
            print(error)
        }
    }

    func udpSocket(sock: GCDAsyncUdpSocket, didReceiveData data: NSData, fromAddress address: NSData, withFilterContext filterContext: AnyObject?) {
        print("--------- didReceiveData ----------")
        let str = NSString(data: data, encoding: NSUTF8StringEncoding) as! String
        print(str)
    }

    func socket(socket : GCDAsyncSocket, didReadData data:NSData, withTag tag:Int)
    {
        print("--------- didReceiveResponse ----------")
        let str = NSString(data: data, encoding: NSUTF8StringEncoding) as! String
        print(str)
    }
}
以下是我得到的回应:

---------didReceiveData----------

M-SEARCH*HTTP/1.1

主持人:239.255.255.250:1900

男:“ssdp:发现”

MX:1

ST:urn:拨号多屏幕组织:服务:拨号:1

用户代理:Google Chrome/54.0.2840.71 Mac OS X

---------didReceiveData----------

M-SEARCH*HTTP/1.1

主持人:239.255.255.250:1900

男:“ssdp:发现”

MX:1

ST:urn:拨号多屏幕组织:服务:拨号:1

用户代理:Google Chrome/54.0.2840.71 Mac OS X

已解决:

我修复了问题,这是我的完整代码,如果有人有相同的问题:

class PluginBelkinViewController: UIViewController, GCDAsyncUdpSocketDelegate {

    var address = "239.255.255.250"
    var port:UInt16 = 1900
    var socket:GCDAsyncUdpSocket!

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func nextPressed(sender: UIButton) {
        let mSearchData = "M-SEARCH * HTTP/1.1\r\nHOST: \(address):\(port)\r\nMAN: \"ssdp:discover\"\r\nMX: 5\r\nST: urn:Belkin:device:\r\n\r\n".dataUsingEncoding(NSUTF8StringEncoding)!

        socket = GCDAsyncUdpSocket(delegate: self, delegateQueue: dispatch_get_main_queue())

        do {
            try socket.bindToPort(0)
            try socket.beginReceiving()
            try socket.enableBroadcast(true)
        } catch {
            socket.close()
            print(error)
        }

        socket.sendData(mSearchData, toHost: address, port: port, withTimeout: -1, tag: 0)

        let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(2 * Double(NSEC_PER_SEC)))
        dispatch_after(delayTime, dispatch_get_main_queue()) {
            self.stopDiscover()
        }
    }

    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)
        let str = NSString(data: data, encoding: NSUTF8StringEncoding) as! String
        print(str)
    }

    func stopDiscover(){
        socket.close()
        socket = nil
    }

}

复制和粘贴错误日志优先于屏幕快照我修复了问题,上面用解决方案更新了帖子复制和粘贴错误日志优先于屏幕快照我修复了问题,上面用解决方案更新了帖子