我正在开发一个应用程序,需要使用OBD连接器同时更新多个参数值,例如引擎转速、速度等。我需要实现异步命令/响应。为此,我使用唯一标记异步地发送命令,例如
但是当gcdAsync的委托方法“socketDidReadDatawithTag”被调用时,它返回的数据不正确。例如,如果我发送了一个名为“010C\r”的命令(读取RPM)和一个名为“010D\r”的命令(速度),分别带有标记263和264,如果我在socketDidReadDatawithTag中使用标记264解析响应,有时会返回RPM的数据。(我的响应混乱了或者OBD设备无法处理异步响应)
[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
中,数据和标记不匹配。