我在基於Swift的iOS應用程序中使用CocoaAsyncSocket庫。我爲我的網絡上的UDP服務器創建了一個異步UDP套接字,併發回一個回覆。從UDP服務器消息中檢索字符串
我讀這個答覆是這樣的:
func udpSocket(sock: GCDAsyncUdpSocket!, didReceiveData data: NSData!, fromAddress address: NSData!, withFilterContext filterContext: AnyObject!) {
println("didReceiveData")
let data = address
var host: NSString?
var port1: UInt16 = 0
GCDAsyncUdpSocket.getHost(&host, port: &port1, fromAddress: address)
println("From \(host!)")
let gotdata = NSString(data: data, encoding: NSASCIIStringEncoding)
//let gotdata: NSString = NSString(data: data, encoding: NSUTF8StringEncoding)
println(gotdata)
}
這是結果:
didReceiveData
From 192.168.1.114
wþÀ¨r
正如你所看到的,這是一串奇怪的字符。
原始數據是<100277fe c0a80172 00000000 00000000>
(通過編寫println(data)
)。這裏的前4個字節似乎是wþÀ¨r
部分,接下來的4個是IP地址,我已經從getHost()
函數中找到了這個IP地址。
我似乎無法找到任何幫助函數來提取UDP服務器接收到的實際數據。我知道UDP回覆的ASCII表示是「你好」。但是,如果我將其更改爲其他內容,則不會反映在我在Xcode調試部分中看到的數據中。它總是wþÀ¨r
。
我試過NSASCIIStringEncoding
和NSUTF8StringEncoding
,但後者導致EXC_BAD_ACCESS
運行時異常。
至於我能找到,這就是人們通常如何做到這一點在Objective-C(在didReceiveData
函數內):
NSString *msg = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
如何找到在UDP答覆「你好」消息作爲字符串表示?
該!使它成爲一個可選的隱式解包。想想你可能不得不將它下載到NSData。使用內聯向下鑄造「as?」並在使用前分配給本地變量。 – casillic 2014-09-20 03:27:37