我正在使用以下代码从服务器套接字读取。一切开始都很好,但随着事情的进展,返回的数据会被截断并错误地分块。我已经阅读了所有尝试不同的东西,例如更改缓冲区大小和同步代码,但仍然没有运气。一开始我以为是因为
-(void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent {
被异步调用所以我尝试同步它,但没有运气。我增加了几次缓冲区,但没有运气......我只想从服务器读取的一整行在每次触发时传递给 messagedReceived。我确信我在这里做了一些愚蠢的事情或忽略了一些对某人来说很明显的事情。
-(void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent {
switch (streamEvent) {
case NSStreamEventOpenCompleted:
DLog(@"Connection Opened!!!");
[delegate connectionOpened];
break;
case NSStreamEventHasBytesAvailable:
if (theStream == inputStream) {
uint8_t buffer[1024];
int len = 0;
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) {
DLog(@"%@", output);
[self messageReceived:output];
}
}
}
}
break;
case NSStreamEventErrorOccurred:
DLog(@"Can not connect to the host!");