在我的iOS应用中,我使用GCDAsyncSocket
库与另一台iPad上运行的本地服务器进行通信。因此,多个iPad可以在本地相互通信,并且其中一个可以充当服务器。
当客户端连接到服务器iPad时,以下GCDAsyncSocketDelegate
会触发:
func socket(_ sock: GCDAsyncSocket, didConnectToHost host: String, port: UInt16) {
sock.readData(toLength: UInt(UInt64.byteWidth), withTimeout: -1, tag: 0)
delay(0.1, queue: socket.delegateQueue, closure: { [weak self] in
sock.write(dataToSend, withTimeout: -1, tag: 0)
})
connected = true
}
一旦客户端连接到服务器,它将向该套接字(服务器)写入一些数据,但是,这些数据不会到达服务器。但是,如果我将写入调用包装在延迟函数中,则数据将到达其目的地。
这是我的延迟功能:
func delay(_ delay: Double, queue: DispatchQueue?, closure: @escaping () -> ()) {
let delayTime = DispatchTime.now() + Double(Int64(delay * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC)
let q = queue ?? DispatchQueue.global()
q.asyncAfter(deadline: delayTime) {
closure()
}
}
我在这里想念什么?