我正在开发一个项目,我需要将客户端(iPhone)连接到服务器。我已经使用 CFStream、NSStream 等完成了这项工作。服务器发送需要在客户端“一一”处理的数据包。问题是有时服务器一个接一个地发送两个数据包,所以我在客户端(通过[inputStream hasBytesAvailable])收到的是两个数据包的串联。
从服务器到客户端的数据包的架构是“数据”+b'00000000'(二进制NULL)。我想知道如何让程序知道当有一个“00000000”字节时,它必须处理该数据包并清空缓冲区。
这是我正在使用的代码:
case NSStreamEventHasBytesAvailable:
if (theStream == inputStream) {
uint8_t buffer[1024];
int len;
while ([inputStream hasBytesAvailable]) {
len = [inputStream read:buffer maxLength:sizeof(buffer)];
if (len > 0) {
NSString *output = [[NSString alloc] initWithBytes:buffer length:len encoding:NSASCIIStringEncoding];
if (nil != output) {
[self processData:output];
NSLog(@"OUTPUT: %@", output);
}
}
}
}
break;
一个例子。服务器发送: msg1_whatever (concatenated with) b'0000000' 之后,它立即发送: msg2_whatever + b'00000000'
然后,NSLog 将显示: msg1_whatever+b'00000000'msg2_whatever+b'00000000'
而不是两个分开的字符串。如果发送 msg1 和 msg2 之间有一点时间,那么它工作得很好,但是这个异常需要处理,因为它会发生多次。