Ofstream-> write не записывает окончательный пакет - PullRequest
3 голосов
/ 27 мая 2019

Я делаю супер простой ftp-сервер для класса в C ++, клиент: чтение из файла и запись в сокет.Сервер: чтение из сокета и запись в файл.Я закончил все сети, и все работает, но ofstream.write ведет себя очень странно: он не записывает последний пакет размером менее 1024 байт.

Я попытался изменить последний размер буфера, чтобы онбудет число прочитанных байтов, я попытался просмотреть флаги ошибок, но ни один из них не произошел, но ничего не было написано, я попытался записать 1024 байта, я пишу, но в конце есть мусор (^ @ chars).

private:
    ofstream &out_stream;

for (;;)
{
    nread = recvfrom(sfd, buf, 1024, 0, (struct sockaddr *)&peer_addr, &peer_addr_len);
    out_stream.write(buf, nread);
    if (nread < 1024)
        break;
}

Записанный файл должен содержать 1687 байтов, но содержит только 1024 байта, а если я попытаюсь out_stream.write(buf, 1024);, он содержит 2048 байтов.Я проверил, что программы идут дважды в цикле, как и должно, поэтому условие не является проблемой.

...