Получение полного сообщения из сокета TCP - PullRequest
0 голосов
/ 14 сентября 2010

Я читаю данные из соединения через сокет TCP, но сервер время от времени отправляет мне \ 0 (что будет означать конец сообщения).Таким образом, я не получаю остальную часть сообщения.

Я читаю так: например,

uint8_t buf[tcpBufferSize];
unsigned int len = 0;

len = [inputStream read:buf maxLength:tcpBufferSize];

if(len > 0) {
    NSMutableData* data=[[NSMutableData alloc] initWithLength:0];
    [data appendBytes: (const void *)buf length:len];
    NSString *s = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

    //here s will be only the part before the \0

    [s release];
    [data release];
}

, если сервер отправляет abc \ 0de, y получит только abc, поскольку0 отмечает конец.

Как я могу получить сообщение целиком ??

1 Ответ

3 голосов
/ 14 сентября 2010

Скорее всего, вы получили все сообщение. Строка предназначена для хранения текста, а не байтовых данных. Если вы хотите сохранить все данные, включая нулевой символ, вы должны оставить его как NSData объект. Если вы хотите извлечь определенные байты и интерпретировать их как текст, вам придется реализовать это самостоятельно.

...