rmo*_*njo 3 objective-c gcdasyncsocket
我想知道如何在诸如的方法中使用tag参数
readDataWithTimeout: tag:
writeData: tag:
Run Code Online (Sandbox Code Playgroud)
如果我想使用标签来识别数据包的类型,会发生什么?例如,我说tag == 2表示数据包是来自客户端的消息,tag == 1表示数据包是来自服务器的消息...如果可以,我需要调用readData:withTag:几次(每个不同的标签一次)?
[readDataWithTimeout:-1 tag:1];
[readDataWithTimeout:-1 tag:2];
Run Code Online (Sandbox Code Playgroud)
有没有办法说:"读取每个数据而不关心标签",然后在didReadData:withTag:方法根据标签处理数据?
我认为你对标签概念有点误解.读取操作不是说"读取已标记为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];
Run Code Online (Sandbox Code Playgroud)
然后你可以在以后识别它...
- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
{
if (tag == kHeaderTag)
{
// Handle header
}
else if (tag == kPayloadTag)
{
// Handle payload
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1425 次 |
| 最近记录: |