我有一个关于如何在 iOS 14 上设置 UDP 侦听器的问题。我有一个 UDP 侦听器,该侦听器过去一直有效,但更新到 iOS 14 后,它偶尔有效/根本无效。
\n它位于 NSObject 中,并在端口 15000(无特定 IP 地址)上侦听本地网络上的 UDP 广播。它使用 CocoaAsyncSocket 库。当我调用setUpSocket()本地网络权限时,不会触发,但应用程序能够偶尔拾取 UDP 数据包。
\nvar socket: GCDAsyncUdpSocket?\nvar broadcastPort: UInt16 = 15000\nvar broadcastAddress: String = ""\nvar connectAddress = ""\nvar connectPort = 0\n\nfunc setUpSocket() {\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0findUDP()\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0let socket = GCDAsyncUdpSocket(delegate: self, delegateQueue: DispatchQueue.main)\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0socket.setIPv4Enabled(true)\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0socket.setIPv6Enabled(false)\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0do {\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0try socket.bind(toPort: broadcastPort) /*15000*/\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0try socket.enableBroadcast(false)\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0try socket.beginReceiving()\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0} catch let error as NSError {\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0print("Issue with setting up listener \\(error)")\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0}\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\n\xc2\xa0\xc2\xa0}\n\n/*Called when UDP packets are received.*/\nfunc udpSocket(_ sock: GCDAsyncUdpSocket, didReceive data: Data, …Run Code Online (Sandbox Code Playgroud)