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 バイトは IP アドレスで、関数から既に取得していgetHost()
ます。
UDP サーバーが受信した実際のデータを抽出するためのヘルパー関数が見つからないようです。UDP 応答の ASCII 表現が「hello」であることはわかっています。しかし、これを別のものに変更すると、Xcode のデバッグ部分に表示されるデータには反映されません。いつも ですwþÀ¨r
。
NSASCIIStringEncoding
との両方を試しましNSUTF8StringEncoding
たが、後者ではEXC_BAD_ACCESS
実行時例外が発生します。
私が見つけることができる限り、これは人々がObjective-Cで通常行う方法です(didReceiveData
関数内):
NSString *msg = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
文字列表現としての UDP 応答で「hello」メッセージを見つけるにはどうすればよいですか?