2016-02-24 3 views
0

Я столкнулся с проблемой здесь при обработке данных, поступающих с сервера, используя boost asio read_some().Рекурсивная обработка данных из сокета?

Формат данных: 83, длина_данных данные

Проблема:

Я получаю пакеты от сервера в кусках, где пакеты могут иметь данные одного или много данных. Кроме того, может быть сценарий, в котором я могу получать отдельные данные в 2-3 пакетах. Хотя я написал итеративную логику, но мне было интересно, может ли some1 предложить рекурсивную логику для этого типа проблем. Я не очень уверен в рекурсии, поэтому помощь будет высоко оценена.

Кроме того, еще один вопрос: максимальная длина, если данные считываются с использованием boost asio read_some(), 1500 байтов?

+2

Я не могу себе представить, где в этом случае рекурсивная реализация была бы полезной (или даже разумно возможной). Можете ли вы рассказать о причинах, по которым вы ищете рекурсивный способ? –

+0

@JackWhite: Ну !! , Я просто подумал, что было бы проще реализовать с использованием рекурсии, поскольку данные обрабатываются снова и снова. Поскольку моя логика с помощью итеративного метода стала очень сложной, следовательно, она стремилась упростить ее. Это можно сделать? – harry

+0

Разбейте данные в очередь, проверьте достоверность данных в очереди, когда вы знаете, что это хорошо, вытащите ее и обработайте. –

ответ

0

разделить предмет на 2 буфера, один для необработанных данных и очередь для полных пакетов.
что-то связывает это:

while(true) { 
    receive data from socket 
    append data to sendBuffer 
    while(sendbuffer contains a complete packet) { 
     move packet to packetQueue(); 
     removePacket from sendbuffer; 
    } 
} 
+0

Я уже делаю что-то похожее на то, что вы предложили. за предложение. – harry

1

Согласно комментариям, я думаю, что рекурсия не будет хорошим выбором here.I должно придерживаться моего итерационного метода. Спасибо every1 за быстрый ответ/предложения