首页 > 解决方案 > 连接套接字后,GCDAsyncSocket 不会写入

问题描述

在我的 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()
    }
}

我在这里缺少什么?

标签: iosgcdasyncsocket

解决方案


推荐阅读