Можно сделать следующее с AsyncSocket:AsyncSocket: как определить чтение длины и получить обратный вызов только при достижении чтения длины
в то время как («ответ пакет» не читается) делать {
- Прочитайте хотя бы первые 5 байт из потока чтения и извлеките из него размер длины ответа «отклик».
- Читайте далее до тех пор, пока не будет достигнуто количество байтов, определенное в заголовке «response packet».
- Если вы достигли конца потока чтения, но некоторые байты не хватает, тогда подождите другой поток чтения и затем прочитайте «пакет ответов».
- Скопируйте прочитанные байты в буфер и отметьте, что данные считываются как данные «отклика».
- Выполняйте обратный вызов моему делегату onSocket: didReadData: withTag: с этими данными.
- Очистить буфер (пакет ответов) и выполнить те же шаги со следующими потоками чтения.
}
Вот мое текущее использование AsyncSocket:
Я пишу данные через сокет с AsyncSocket:
[_socket writeData:request withTimeout:commandData tag:commandTag];
и получения обратного вызова в моем классе делегата:
onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
Задача em is, в потоке данных нет завершающего символа, и единственный способ отличить длину отправки «пакетов ответов» состоит в том, чтобы читать и анализировать свои первые 5 байтов и использовать это для резки данных в «пакеты» и выполнения обратных вызовов для моего делегата. В настоящее время я использую AsyncSocket, как показано в фрагменте кода выше, и некоторые обратные вызовы «onSocket: didReadData: withTag:» уже представляют собой пакеты данных большой длины (полученные NSData), но некоторые из них объединены. IMHO Мне нужно явно сказать AsyncSocket, как интерпретировать и вырезать поступающие данные в пакеты при чтении.
Эй вы знаете, как определить размер пакета ответа? или Должен ли я делать предположение о размере? благодаря –