когда я использую GCDasyncsocket для получения сокета Сообщение с сервера (java), оно работает в симуляторе ios (xcode 6, iphone6 +); но когда я использую свой iphone6 +, подключаю его к тестированию, он потеряет данные, когда получит большие данные, подробности ниже . Я посылаю запрос на сервер и получаю 3 ответа первые данные длина ответа сервера равна 9 и принимают 9 во-вторых, 149 и получить 149 последние данные ответ сервера: 2912, но код показывает 1448, я получаю 1448 в коде ниже:GCDAsyncSocket потеряет данные
-(void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag {
NSLog(@"receive datas from method 1");
NSLog(@"Data length = %d",[data length]);
...
и когда я углубиться, код gcdasyncsocket показывает то же самое, код ниже
if (currentRead->bufferOwner)
{
// We created the buffer on behalf of the user.
// Trim our buffer to be the proper size.
[currentRead->buffer setLength:currentRead->bytesDone];
result = currentRead->buffer;
NSLog(@"if %lu %lu",(unsigned long)currentRead->bytesDone,(unsigned long)result.length);
}
хорошо работает в симуляторе, но идет не так, как в реальном телефоне, я также тестирую iphone4s, он хорошо работает в большинстве случаев ~~~~~~~~~~ , как странно!
Может ли кто-нибудь дать мне несколько предложений?
Если вы используете разделитель, чтобы прочитать данных, а затем перекрестная проверка, если данные вашего сервера имеют точно такие же байты данных, что и для разделителя. Это может привести к тому, что клиент прекратит чтение байтов при первом появлении блока данных разделителя. – Gandalf
Большое спасибо за ваш ответ, я нашел причину; это протокол, разделяющий сообщение, и я использую метод, чтобы сказать, что длина моего сообщения разрешила эту ситуацию – user4246451