Tôi đang cố gắng để nhận được phản hồi SSDP sử dụng nhanh chóng với CocoaAsyncSocket thư viện (https://github.com/robbiehanson/CocoaAsyncSocket)Nhận SSDP phản ứng sử dụng CocoaAsyncSocket trong Swift
tôi thành công có thể gửi lệnh M-Search vào nhóm multicast và nhận được một phản ứng, Tôi đã nhìn vào wireshark (http://i.imgur.com/pn6LB7R.png): Tôi có thể thấy các gói M-Search sẽ xuất hiện và các phản hồi sẽ trở lại nhưng tôi không bao giờ nhận được NSData trong ứng dụng của mình. (Btw Tôi đang tìm kiếm chỉ cho một Roku tại thời điểm này)
Tôi đã thực hiện các đại biểu GCDAsyncUdpSocketDelegate và thêm các didReceiveData func, tuy nhiên tôi không bao giờ nhận được dữ liệu.
tôi nghi ngờ có cái gì đó sai trong phần này:
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)
Xin xem mẫu mã bên dưới:
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.
}
}
bạn có thể cung cấp mẫu để tham khảo không? –