0

私は、サーバー (プロトコルを制御できない) に接続し、各行が CRLF で終わるテキスト データのストリームを取得する iPhone アプリを作成しています。未定。GCDAsyncSocketを再帰的に呼び出して、1readDataToData: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