Чтение данных из CFReadStream и преобразование их в NSString

У меня проблема с моим приложением для iPhone, которое я создаю. Приложение отправляет запрос JSON на сервер Python, а затем читает ответ JSON с сервера. У меня есть следующая функция, которая отправляет данные на сервер и получает ответ и помещает его в NSData. (Я вынул адрес сервера для поста)

+(NSData *)accessServer:(NSMutableDictionary *) dic needResponse:(BOOL) response
{
    // Conect to the server
    CFReadStreamRef readStream;
    CFWriteStreamRef writeStream;
    CFStringRef remoteHost = CFSTR("");
    CFStreamCreatePairWithSocketToHost(NULL, remoteHost, 5687, &readStream, &writeStream);
    CFWriteStreamOpen(writeStream);
    CFReadStreamOpen(readStream);

    // send data
    NSData *json = [NSJSONSerialization dataWithJSONObject:dic options:0 error:nil];
    NSString *jsonString = [[NSString alloc]initWithData:json encoding:NSUTF8StringEncoding];
    jsonString = [NSString stringWithFormat:@"%@%@", jsonString, @"\r\n\r\n"];
    UInt8 *writeBuf = (UInt8 *)[jsonString UTF8String];
    int writtenBytes = 0;
    int bytesToSend = (int)[jsonString lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
    while(writtenBytes < bytesToSend)
    {
        writtenBytes += CFWriteStreamWrite(writeStream, writeBuf, bytesToSend-writtenBytes);
    }
    NSLog(@"Done sending, Sent :%d Total: %d",writtenBytes,bytesToSend);
    CFWriteStreamClose(writeStream);
    if(response)
    {
        // get the return data
        uint8_t readData[10000];
        int readBytes = 1;
        int totalRead = 0;
        while(readBytes > 0)
        {
            readBytes = (int)CFReadStreamRead(readStream, readData, 10000);
            totalRead += readBytes;
        }
        CFReadStreamClose(readStream);
        return [[NSData alloc]initWithBytes:readData length:totalRead];
    }
    else
    {
        CFReadStreamClose(readStream);
        return nil;
    }
}

Проблема в том, что когда я попытался взять NSData и преобразовать его в NSString, он имеет длину 0, а NSData имеет длину> 0. Следующий код - как я беру NSData и преобразовываю его в NSString.

NSData *t = [Globals accessServer:getLocationData needResponse:TRUE];
NSString *tempString = [[NSString alloc]initWithData:t encoding:NSUTF8StringEncoding];

Эта проблема, кажется, происходит примерно в 10% случаев. Иногда это не случается в течение часа, а иногда - 10 раз подряд. Любая помощь приветствуется, и, пожалуйста, дайте мне знать, если вам нужна дополнительная информация, которую я, возможно, забыл добавить в это.

0 ответов

Другие вопросы по тегам