在我的Swift 2.2应用程序中,我使用UDP通过本地网络进行通信。我正在使用SwiftSocket发送和接收UDP。设置UDP服务器的方式与库类似:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), { () -> Void in
let server:UDPServer=UDPServer(addr:"192.168.1.9",port:8888)
let run:Bool=true
while run{
let (data, _,_)=server.recv(1024)
if let d=data{
if let str=String(bytes: d, encoding: NSUTF8StringEncoding){
print(str)
}
}
server.close()
break
}
})
dispatch_async很好,因为它可能需要几个小时才能收到一条消息,并且如果你没有收到任何你使用dispatch_sync时遇到的内容,它就不会冻结应用程序。
此方法的问题:当收到一个UDP数据包时,服务器会停止,并且不会重复此代码。收到数据包时,应重复此代码。
如果你使用dispatch_sync的while循环,它工作正常,但应用程序冻结。如果你使用dispatch_async的while循环,它会立即再次运行,内存将在几秒钟内完成。 这可能是一个相当愚蠢的问题,但有些帮助会很棒!
非常感谢!