【发布时间】:2014-07-17 17:37:39
【问题描述】:
在我的应用程序中,我使用的是 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 块内;它似乎无法识别新标签。
为什么会这样?
【问题讨论】:
-
读写的tags值没有关系。
-
好的,管理不同阅读器的方法是什么?
-
发送数据时,应在数据前添加header,告知peer数据何时结束。在标头中,应该有一个表示数据长度的长度字段和一个表示数据索引的id字段。 id 字段作为代码中的标记,但它需要服务器发送具有相同 id 的响应。
-
可以举个例子吗?似乎如果我在委托方法“didRead”中有一个打开的“readData”,它会继续工作,直到到达一些要读取的数据
标签: ios asyncsocket gcdasyncsocket