0

我正在制作一个 iPhone 应用程序,它连接到服务器(我无法控制其协议)并获取文本数据流,其中每行以 CRLF 结尾,行数以及它们的确切长度是未定。我正在递归地调用GCDAsyncSocket'readDataToData:withTimeout:tag:来逐行获取数据。

我以前是从NSStream同步读取的,所以我会通过调用来知道读取何时完成hasBytesAvailable。我最近切换到GCDAsyncSocket,现在我还想知道流何时读取了所有可用数据,以便我可以保存/处理数据、刷新表格、删除覆盖等。

在请求下一次读取之前,我尝试使用与以前类似的技术,在我的socket:didReadData:withTag:委托方法中调用以下内容:

[asyncSocket performBlock:^{
    if (CFReadStreamHasBytesAvailable([sock readStream]))
        NSLog(@"CFReadStreamHasBytesAvailable: yes");
    else
        NSLog(@"CFReadStreamHasBytesAvailable: no");
}];

但结果总是YES

我也尝试在发送读取请求后调用该方法progressOfReadReturningTag:bytesDone:total:,当读取完成时它似乎总是返回 1 ,否则返回 nil ,但我不确定以这种方式使用该方法是否可靠。

也许有人可以告诉我progressOfReadReturningTag:...在这种情况下是否真的可靠,或者,如果不是,请指出我另一个方向来解决这个问题。

4

0 回答 0