2014-11-13 2 views
2

когда я использую 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, он хорошо работает в большинстве случаев ~~~~~~~~~~ , как странно!

Может ли кто-нибудь дать мне несколько предложений?

+0

Если вы используете разделитель, чтобы прочитать данных, а затем перекрестная проверка, если данные вашего сервера имеют точно такие же байты данных, что и для разделителя. Это может привести к тому, что клиент прекратит чтение байтов при первом появлении блока данных разделителя. – Gandalf

+0

Большое спасибо за ваш ответ, я нашел причину; это протокол, разделяющий сообщение, и я использую метод, чтобы сказать, что длина моего сообщения разрешила эту ситуацию – user4246451

ответ

0

У меня есть причина; это то, что протокол разделяет сообщение; Я использую метод для отправки длины сообщения, чтобы сообщить протоколу, как его разделить; также есть некоторые другие решения для его решения;

и после этого, я также обнаружил, что протокол будет сочетать в себе какое-то сообщение, поэтому, когда вы пытаетесь решить, вы не можете думать только о разделенном sitution!

Смежные вопросы