我在基于 Swift 的 iOS 应用程序中使用CocoaAsyncSocket库。我已经为我网络上的 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 个字节是我已经从getHost()
函数中检索到的 IP 地址。
我似乎找不到任何帮助函数来提取 UDP 服务器接收到的实际数据。我知道 UDP 回复的 ASCII 表示是“你好”。但是,如果我将其更改为其他内容,它不会反映在我在 Xcode 调试部分中看到的数据中。它总是 wþÀ¨r
。
我已经尝试过使用NSASCIIStringEncoding
and NSUTF8StringEncoding
,但后者会导致EXC_BAD_ACCESS
运行时异常。
据我所知,这是人们通常在 Objective-C 中(在didReceiveData
函数内部)执行此操作的方式:
NSString *msg = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
如何在 UDP 回复中以字符串表示形式找到“hello”消息?