Skip to main content
 首页 » 操作系统

ios之从 UDP 服务器消息中检索字符串

2024年01月01日45grandyang

我正在使用 CocoaAsyncSocket我基于 Swift 的 iOS 应用程序中的库。我已经创建了一个到我网络上的 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() 中检索到了功能。

我似乎找不到任何辅助函数来提取 UDP 服务器接收到的实际数据。我知道 UDP 回复的 ASCII 表示是“你好”。但是,如果我将其更改为其他内容,它不会反射(reflect)在我在 Xcode 的调试部分中看到的数据中。它是总是 wþÀ¨r .

我都试过 NSASCIIStringEncoding和 NSUTF8StringEncoding , 但后者导致 EXC_BAD_ACCESS运行时异常。

据我所知,人们通常在 Objective-C 中这样做(在 didReceiveData 函数内):

NSString *msg = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 

如何在 UDP 回复中找到字符串表示形式的“hello”消息?

请您参考如下方法:

您在第一行为数据变量分配了地址,从而覆盖了数据中的值。

let data = address 

我复制了您的代码以尝试其他方法并注意到错误。