我正在开发一个应用程序,在该应用程序中,我需要使用 OBD 连接器一次更新多个值,例如引擎 RPM、速度等参数。我需要实现异步命令/响应。为此,我使用[gcdAsyncSocket writeData:data withTimeout:-1 tag:uniqueTag];
带有唯一标签的异步方式发送命令。
但是当 gcdAsync 的委托方法“socketDidReadDatawithTag”被调用时,它会返回数据但它不正确。例如,如果我发送了一个命令“010C\r”(读取 RPM)和“010D\r”(速度),带有标签263 和 264 ,如果我在 socketDidReadDatawithTag 中解析带有标签 264 的响应,有时它会返回给我 RPM 的数据。(我的响应混淆或 OBD 设备无法处理异步响应)
NSLog(@"Command Sent for Async : %@",commandString);
NSData *data = [commandString dataUsingEncoding:NSASCIIStringEncoding];
long obdObjectTag = [obdObject getPIDTag];//Unique Tag
[gcdAsyncSocket writeData:data withTimeout:-1 tag:obdObjectTag];
NSData *readData = [@">" dataUsingEncoding:NSASCIIStringEncoding];
[gcdAsyncSocket readDataToData:readData withTimeout:-1 tag:obdObjectTag];
并且socketdidReadDatawithTag
数据和标签不匹配。