Почему в буфер не попадает полное сообщение? - C (СИ)
Формулировка задачи:
Даже не знаю,хватит ли у кого желания проковырять этот исходник
Программа по изучению работы с сокетами.
При подключении к серверу программа читает сообщение почты,но по какой-то причине в буфер попадает не всё сообщение,и притом то,что находится в буфере,может состоять из начала сообщения и его конца/середины. Размер буфера вроде позволяет принять сообщение полностью
Сервер сообщает о размере сообщения в 41842 октета (я так понимаю,это числа по 8 бит каждое?)
Получение пакета от сервера происходит в функции receive_srv_answer в файле netlib.c (пакет принимается в буфер блоками с максимальным размером MSG_SEGMENT_SIZE),а на печать его содержимое выводится функцией print_srv_answer в файле frontend.c. В чём может быть загвоздка,почему данные в буфере неполные и перемешиваются?
Просто не возьму в толк, как так можно ошибиться, и главное, никаких вылетов нет,это странно.
Если кто-то захочет глянуть,помочь - я облегчил задачу,как мог - нужно просто скомпилить и запустить в консоли бинарник.Прога работает в автоматическом режиме. Не уверен,будет ли это компилиться на винде,но заголовки я указал на всякий случай.
Исходный текст,ожидаемый в буфере находится в файле expected-message
Исходник прикрепляю в надежде ))
#define MAX_DATA_SIZE 1048571 /* Default maximal allowed message size*/ #define MSG_SEGMENT_SIZE 32768
Решение задачи: «Почему в буфер не попадает полное сообщение?»
textual
Листинг программы
while (bytes_received < bufsize) {
Объяснение кода листинга программы
- Вход в цикл while.
- Проверка условия bytes_received < bufsize.
- Если условие истинно, то происходит переход к следующему шагу.
- Если условие ложно, то происходит выход из цикла. Внутри цикла:
- Передача данных из файла в буфер:
- Приемник данных (переменная buffer) получает значение из файла.
- Значение переменной bytes_received увеличивается на единицу.
- Если значение переменной bytes_received становится равным bufsize, то происходит выход из цикла.
- Вывод сообщения об успешном получении данных:
- Вывод сообщения об успешном получении данных (переменная message).
- Если значение переменной bytes_received становится равным bufsize, то происходит выход из цикла.
- Увеличение указателя на буфер на единицу:
- Увеличение указателя на буфер на единицу (переменная buffer).
- Если значение переменной bytes_received становится равным bufsize, то происходит выход из цикла.
- Увеличение значения переменной bytes_received на единицу:
- Увеличение значения переменной bytes_received на единицу.
- Если значение переменной bytes_received становится равным bufsize, то происходит выход из цикла.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д