私のアプリでは GCDAsyncSocket を使用しており、次のように読み書きします。
NSData *bufferWriteData = [NSData dataWithBytesNoCopy:bufferWrite length:17 freeWhenDone:YES];
[self.socket writeData:bufferWriteData withTimeout:-1 tag:1];
[self.socket readDataWithTimeout:-1 tag:1];
デリゲート メソッドでデータを読み込んだ後:
- (void) socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{
NSLog(@"did read data");
if (tag == 1){
//analyze my data...
[self.socket readDataWithTimeout:-1 tag:1];
}
このデリゲート メソッド内で "readDataWithTimeout" を思い出すので、この方法ですべてのデータを読み取ります。
私が行う場合、新しい呼び出しを行うときの問題ID:
[self.socket writeData:bufferWriteData withTimeout:-1 tag:2];
[self.socket readDataWithTimeout:-1 tag:2];
tag = 2 で新しい書き込みと新しい読み取りを開始します。デリゲート メソッド「didReadData」が呼び出されると、私のコードは tag = 1; のブロック内に入ります。新しいタグを認識していないようです。
なぜそれが起こるのですか?