내가 성공적으로 멀티 캐스트 그룹에 M-검색 명령을 보내고 응답을 얻을 수스위프트
라이브러리 CocoaAsyncSocket (https://github.com/robbiehanson/CocoaAsyncSocket)와 빠른 사용하여 SSDP 응답을받을하기 위해 노력하고있어에서 CocoaAsyncSocket를 사용하여 SSDP 응답을 받기, 나는 wireshark (http://i.imgur.com/pn6LB7R.png)를 보았다 : M-Search 패킷이 나가고 응답이 되돌아 오는 것을 볼 수는 있지만 애플리케이션에서 NSData를 수신하지 못한다. (Btw 나는 지금 막 Roku를 찾고있다.)
나는 GCDAsyncUdpSocketDelegate Delegate를 구현했고 didReceiveData func를 추가했다. 그러나 나는 결코 데이터를 얻지 못했다.
나는이 부분에서 문제가있는 생각 :
ssdpSocket = GCDAsyncUdpSocket(delegate: self, delegateQueue: dispatch_get_main_queue())
ssdpSocket.bindToPort(ssdpPort, error: &error)
ssdpSocket.beginReceiving(&error)
ssdpSocket.enableBroadcast(true, error: &error)
ssdpSocket.connectToHost(ssdpAddres, onPort: ssdpPort, error: &error)
ssdpSocket.joinMulticastGroup(ssdpAddres, error: &error)
아래 예제 코드를 참조하십시오 :
import UIKit
class ViewController: UIViewController, GCDAsyncUdpSocketDelegate {
//ssdp stuff
var ssdpAddres = "239.255.255.250"
var ssdpPort:UInt16 = 1900
var ssdpSocket:GCDAsyncUdpSocket!
var ssdpSocketRec:GCDAsyncUdpSocket!
var error : NSError?
override func viewDidLoad() {
super.viewDidLoad()
ssdpSocket = GCDAsyncUdpSocket(delegate: self, delegateQueue: dispatch_get_main_queue())
ssdpSocket.bindToPort(ssdpPort, error: &error)
ssdpSocket.beginReceiving(&error)
ssdpSocket.enableBroadcast(true, error: &error)
ssdpSocket.connectToHost(ssdpAddres, onPort: ssdpPort, error: &error)
ssdpSocket.joinMulticastGroup(ssdpAddres, error: &error)
//replace ST:roku:ecp with ST:ssdp:all to view all devices
let data = "M-SEARCH * HTTP/1.1\r\nHOST: 239.255.255.250:1900\r\nMAN: \"ssdp:discover\"\r\nMX: 3\r\nST: roku:ecp\r\nUSER-AGENT: iOS UPnP/1.1 TestApp/1.0\r\n\r\n".dataUsingEncoding(NSUTF8StringEncoding)
ssdpSocket.sendData(data, withTimeout: 1, tag: 0)
}
func udpSocket(sock:GCDAsyncUdpSocket!,didConnectToAddress data : NSData!){
println("didConnectToAddress")
println(data)
}
func udpSocket(sock: GCDAsyncUdpSocket!, didReceiveData data: NSData!, fromAddress address: NSData!, withFilterContext filterContext: AnyObject!) {
println("didReceiveData")
println(data)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
샘플을 참고로 제공 할 수 있습니까? –