在后台反复运行UDP服务器

时间:2016-03-03 22:02:12

标签: swift udp swift2 grand-central-dispatch

在我的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循环,它会立即再次运行,内存将在几秒钟内完成。 这可能是一个相当愚蠢的问题,但有些帮助会很棒!

非常感谢!

0 个答案:

没有答案