Ошибка при получении данных с сервера (только строка данных).NSInputStream не получает все данные
для примера
сервер послал данные (15000bytes)
мой iPhone полученных данных (7878bytes)
поэтому я стараюсь искать и я знаю, в то время как метод ответа.
, но я не могу применить мой код ..
Я думаю NSMutableData это намек ..
как сделать ..
Вот мой код.
- (void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent {
NSLog(@"stream event %lu", (unsigned long)streamEvent);
switch (streamEvent) {
case NSStreamEventOpenCompleted:
NSLog(@"Stream opened");
if(_connectServer)
{
[_connectServer invalidate];
_connectServer = nil;
}
break;
case NSStreamEventHasBytesAvailable:
if (theStream == inputStream)
{
if(!_serverOpen)
{
uint8_t buffer[1024];
int len;
while ([inputStream hasBytesAvailable])
{
len = (int)[inputStream read:buffer maxLength:sizeof(buffer)];
if (len > 0)
{
NSString *output = [[NSString alloc] initWithBytes:buffer length:len encoding:NSUTF8StringEncoding];
if (nil != output)
{
[self receivedServerData:output];
if(!_serverOpen)
{
[self initNetworkCommunicationWithIpPort:output];
}
}
}
}
}
else
{
uint8_t buffer[20];
int len;
while ([inputStream hasBytesAvailable])
{
len = (int)[inputStream read:buffer maxLength:sizeof(buffer)];
NSString* strBuffer = [[NSString alloc] initWithBytes:buffer length:len encoding:NSUTF8StringEncoding];
NSLog(@"STRBUFFER %@", strBuffer);
strBuffer = [strBuffer substringFromIndex:7];
uint8_t dataBuffer[[strBuffer intValue]];
NSLog(@"databuffer %lu", sizeof(dataBuffer));
int lenBuffer = [inputStream read:dataBuffer maxLength:sizeof(dataBuffer)];
NSLog(@"lenBuffer %d", lenBuffer);
int position = 0 ;
if (lenBuffer > 0)
{
NSString *output = [[NSString alloc] initWithBytes:dataBuffer length:lenBuffer encoding:NSUTF8StringEncoding];
if (nil != output)
{
[self receivedServerData:output];
if(!_serverOpen)
{
[self initNetworkCommunicationWithIpPort:output];
}
}
}
}
}
}
else
{
NSLog(@"333");
}
break;
case NSStreamEventHasSpaceAvailable:
{
}
break;
case NSStreamEventErrorOccurred:
NSLog(@"Can not connect to the host!");
_serverOpen = NO;
break;
case NSStreamEventEndEncountered:
[theStream close];
[theStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
theStream = nil;
break;
default:
NSLog(@"Unknown event");
}
}
Добавьте код для метода: 'receivedServerData'. – zaph
Используете ли вы какой-либо метод для сериализации данных. Например: google protocolbuffer, zlib, ... –