выделить память для данных http-запроса - PullRequest
0 голосов
/ 21 ноября 2018

В настоящее время я делаю программу на c ++, связанную с сокетом Windows.В части, где я собираюсь получить ответ от http-запроса и поместить данные в буфер, я объявил размер буфера, равный 10000, мой вопрос заключается в том, как я могу выделить память во время выполнения и не понадобитсяобъявить размер буфера при компиляции?

Исходный код для получения данных из http-запроса:

char buffer[10000];

// Receiving and Displaying an answer from the Web Server
    ZeroMemory(buffer, sizeof(buffer));
    while ((dataLen = recv(Socket, buffer, sizeof(buffer), 0) > 0))
    {
        int i = 0;
        while (buffer[i] >= 32 || buffer[i] == '\n' || buffer[i] == '\r') {
            cout << buffer[i];
            i += 1;
        }
    }

спасибо за помощь!

1 Ответ

0 голосов
/ 21 ноября 2018

Возможно, вы хотите что-то вроде этого:

std::vector<uint8_t> req_body;

/* temporary buffer */
char buffer[1024];

/* count of read bytes per chunk */
size_t read = 0;

while (read = recv(Socket, buffer, sizeof(buffer), 0))
{
    size_t old_size = req_body.size();

    /* expand body size */
    req_body.resize(old_size + read);

    /* write new chunk of data to body */
    memcpy(req_body.data() + old_size, buffer, read);
}

/* handle request */

req_body.clear();

Также напомните, что нет никаких гарантий полноты данных.Поэтому лучше дождаться заголовка Content-Length, затем найти конец блока заголовков и дождаться получения полной длины, прежде чем очистить тело.

...