Ios 从NSInputStream读取垃圾

Ios 从NSInputStream读取垃圾,ios,buffer,inputstream,Ios,Buffer,Inputstream,Im使用输入流与POS设备通信 当我发送第一个请求时,响应是正常的。当我发送第二个请求时,问题就出现了,因为第二个响应比第一个短,而且内容仍然在流中。因此,我得到以下信息: 第一个答复: <response>A really big response with much more things inside</response> 2) 然后我写下我的请求: [oStream write:(uint8_t *)[request UTF8String] maxLength:

Im使用输入流与POS设备通信

当我发送第一个请求时,响应是正常的。当我发送第二个请求时,问题就出现了,因为第二个响应比第一个短,而且内容仍然在流中。因此,我得到以下信息:

第一个答复:

<response>A really big response with much more things inside</response>
2) 然后我写下我的请求:

[oStream write:(uint8_t *)[request UTF8String] maxLength:[request length]];
3) 当响应到达时,我捕获它并将其发送给解析器:

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];
在此之后,我尝试关闭流并在发送第二个请求之前再次打开它们

谢谢和问候


PS:这不是一个阻塞问题,因为我可以得到正确的子字符串,但我不明白为什么会发生这种情况,因为您的
缓冲区
字符串没有
\0
(NULL)终止。 可能
uint8\u t buffer[MAX\u buffer\u SIZE]={0}将解决您当前的问题

但是,您应该考虑一个响应可能比Max SuffelySosi- 1 长。 即使响应比它短,

read:maxLength:
也不能保证一次读取所有数据。您必须检查返回值,并且接收的数据具有完整的响应


此外,不要
free(buffer)
,因为
free()
仅用于
malloc()
ed内存,不用于自动变量。

您能显示您的代码吗?@Larme-sure。1秒钟,我将编辑post@Larme已编辑
[oStream write:(uint8_t *)[request UTF8String] maxLength:[request length]];
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];