タグの概念を少し誤解していると思います。読み取り操作は、「2 としてタグ付けされたデータを読み取る」とは言っていません。彼らは、「ネットワークから次のデータを読み取り、将来の参照用に 2 としてタグ付けしてください」と言っています。
タグがネットワーク経由で送信されることはありません。サーバーはデータにタグを付けず、クライアントに送信して読み取らせませんでした。これは、ローカル操作を互いに区別するためにのみ使用される完全にオプションの概念です。つまり、読み取られているデータにはタグがありません。タグは読み取り操作に割り当てるものなので、完了後に後で識別できます。
たとえば、データを一連のヘッダーとペイロードとして読み取っているとします。タグを使用して、ヘッダーの読み取りとペイロードの読み取りを区別できます。
const NSInteger kHeaderTag = 1;
const NSInteger kPayloadTag = 2;
// Assume you know to expect a header, so tag the read operation as such.
[self readDataWithTimeout:-1 tag:kHeaderTag];
// Next assume you know to expect a payload, so tag the read operation as such.
[self readDataWithTimeout:-1 tag:kPayloadTag];
後から特定できるので...
- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
{
if (tag == kHeaderTag)
{
// Handle header
}
else if (tag == kPayloadTag)
{
// Handle payload
}
}