私のアプリは、AsyncSocketを使用してTCP経由でサーバーと通信します。コミュニケーションが行われる状況は2つあります。
アプリはサーバーに何かを送信し、サーバーは応答します。アプリはこの応答を読み取り、その中の情報を使用して何かを行う必要があります。この応答は常に同じ長さです。たとえば、応答は常に6バイトです。
アプリは「アイドリング」状態であり、サーバーはある時点で通信を開始します(アプリには不明)。アプリは、サーバーが送信しているものをすべて読み取り(任意のバイト数にすることができますが、最初のバイトは後続のバイト数を示すため、読み取りを停止するタイミングがわかります)、この情報を処理する必要があります。
最初の状況は正常に機能しています。readDataToLength:timeout:tag
必要なものを返し、それを使ってやりたいことができます。実装方法がわからないのは2番目の状況です。readDataToLength:timeout:tag
事前に長さがわからないので使えません。
readDataWithTimeout:tag:
タイムアウトを-1に設定して、何かできると思います。これにより、ソケットは入ってくるものを常にリッスンできるようになると思います。ただし、それはおそらく、私が送信したものへの応答として入ってくるデータに干渉します(状況1)。アプリは、受信データをシチュエーション1またはシチュエーション2と区別できなくなりました。
私にこれを解決するのを手伝ってくれる人はいますか?