我的iOS应用需要连接多台服务器,最多五台。当我顺序连接时,它很慢,因为服务器对初始数据查询的响应大约需要三秒钟。但是,如果我打开同时连接,响应会混合在一起,因为它们分别在第二部分末尾的CRLF中分为两部分。通过两个连接,我最终得到两个输入:partApartApartB和partB。
创建时,侦听器将添加到运行循环中。他们可以被分成不同的线程吗?如果是这样,听众是否会彼此隔离,因此来自多个输入流的数据不会混合?
我使用的代码很常见。我的流监听器是:
- (void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent {
switch (streamEvent) {
case NSStreamEventOpenCompleted:
break;
case NSStreamEventHasBytesAvailable:
if (theStream == self.inputStream) {
uint8_t buffer[1024];
int len;
while ([self.inputStream hasBytesAvailable]) {
len = [self.inputStream read:buffer maxLength:sizeof(buffer)];
if (len > 0) {
NSString *output = [[NSString alloc] initWithBytes:buffer length:len encoding:NSASCIIStringEncoding];
self->recieved = [self->recieved stringByAppendingString:output];
if (nil != output && [self->recieved hasSuffix:@"->"]) {
[self messageReceived:recieved];
recieved = @"";
}
}
}
}
break;
case NSStreamEventErrorOccurred:
break;
case NSStreamEventEndEncountered:
[self close];
break;
case NSStreamEventHasSpaceAvailable:
break;
default:
break;
} // end switch
}
答案 0 :(得分:0)
我找到了一个简单的解决方案。通过将每个流放入新类的单独实例中,两个输入流彼此隔离。我之前使用了几个变量来将所有流保存在一个类中,这个方法在我的其他环境中有效,但在iOS中却没有。