美文网首页iOS 问答集合
iOS CocoaAsyncSocket收到一条消息被自动分割成

iOS CocoaAsyncSocket收到一条消息被自动分割成

作者: 船长_ | 来源:发表于2018-04-21 11:04 被阅读62次

    问题描述
    后台返回的是消息数组,有可能数量比较多,比如10几条,此时不做处理CocoaAsyncSocket会把这条比较大的json数据自动分割成若干条,也就是说下面这个接受消息的方法调用了若干次,理论上应该调用一次

    //MARK: 接收到消息
    func socket(_ sock: GCDAsyncSocket, didRead data: Data, withTag tag: Int) {
        ...
    }
    

    解决方法
    重新设置接受数据的最大值,比如maxLength为50000

    // 写入数据成功 , 重新开启允许读取数据
    func socket(_ sock: GCDAsyncSocket, didWriteDataWithTag tag: Int) {
        beginReadDataTimeOut(timeOut: -1, tag: 0)
    }
    
    /// 开启接收数据
    func beginReadDataTimeOut(timeOut:TimeInterval,tag:Int) {
        chatSocket.readData(to: GCDAsyncSocket.lfData(), withTimeout:timeOut, maxLength: 50000, tag: tag)
    }
    

    相关文章

      网友评论

      • jiangamh:是数据太大超过了包的最大值,被分割了成几个tcp包了
      • 谢谢生活:一次级接受数据的最大值吗?
      • niuxinghua:这是黏包吧
        船长_:@niuxinghua 不是

      本文标题:iOS CocoaAsyncSocket收到一条消息被自动分割成

      本文链接:https://www.haomeiwen.com/subject/jfztlftx.html