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