Im utilisant des flux d'entrée pour communiquer avec un périphérique POS. Lorsque j'envoie la première requête, la réponse est normale. Le problème vient quand j'envoie la deuxième demande parce que la deuxième réponse est plus courte que la première et que le contenu est toujours dans le flux. Donc, je reçois les éléments suivants:Lecture des ordures à partir de NSInputStream
Première réponse:
<response>A really big response with much more things inside</response>
Deuxième réponse;
<response>A not so big response</response>more things inside</response>
Je fais ce qui suit:
1) Ouvrez les flux
CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)host, [port intValue], &readStream, &writeStream);
iStream = (NSInputStream *)readStream;
oStream = (NSOutputStream *)writeStream;
[iStream setDelegate:self];
[oStream setDelegate:self];
[iStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[oStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[iStream open];
[oStream open];
2) alors j'écris ma demande:
[oStream write:(uint8_t *)[request UTF8String] maxLength:[request length]];
3) lorsque la réponse arrive i capturez-le et envoyez-le à l'analyseur:
uint8_t buffer[MAX_BUFFER_SIZE];
[iStream read:buffer maxLength:MAX_BUFFER_SIZE - 1];
NSString *response = [NSString stringWithUTF8String:(char *)buffer];
free(buffer);
NSError *error;
NSDictionary *ret =[SimpleXMLConverter dictionaryForXMLString:response error:&error];
Après cela, j'ai essayé de fermer les cours d'eau et les ouvrir à nouveau avant d'envoyer la deuxième demande
Merci et salutations
PS: ne est pas un problème de blocage parce que je peux obtenir la sous-chaîne correcte, mais Je ne comprends pas pourquoi cela se produit
Pourriez-vous montrer votre code? – Larme
@Larme sûr. 1 seconde, je vais éditer le poste –
@ Larme déjà édité –