Мое видение: 1. Передаем ID (3 байта), потом размер файла. --> Принимаем число, указывающее на максимально возможное чило байт, которое клиент может принять. 2. Передаем ID и число, которое мы можем отправить, с поправкой на то число которое прислал клиент. 3. Ожидаем единицу --> если пришла 1, то отправляем 1 клиенту, иначе отсылаем другое число, и так до тех пор, пока не дойдем до 1. 4. Согласование буферов прошло, отсылаем ID и N байт и позицию. Повторяем, пока клиент не скажет 0. Отрубаемся. Вроде бы все просто, но что делать, если файл > 1 гигабайта? Как быть?
a) использовать TCP или b) реализовать подмножество свойств TCP - тебе нужно "окно" или, хотя бы, послать блок + подтвердить блок
Посмотри как работает протокол TFTP можно посылать данные с фиксированым размером например 512 байт. Признаком окончания приема являеться получение пакета меньшего размера. В этом случае нет необходимости отправки подтверждения и указывать размер. Так же можно выполнить мелнькую модификацию для каждой пачки добавить ID для пакета который должен быть отправлен повторно.
Спасибо. Но думаю, что лучше посылать доболнительные байты подтверждения целостности (какие-еще н придумал) Просто прием более меньшего пакета может указывать не только на конец файла, но и на проблемы с соединением или на нарушение целостности данных.
на нарушение целосности указывает конторльная сумма IP пакета. В твое случае варианта только 2 получен или не получен.
[offtop] Scratch Кто такая "(с) Катя Чехова" и что означает сей (видимо - высокохудожественный) образ? Спасибо. [/offtop]
reddrak Пакет формируется после того как отработает куча ф-ций по чтению и обработке данных, приведению их в читаемый вид. То есть битые данные могут быть втиснуты в сформированный пакет.
да для IP чек суммы используется только заголовок IP. Но суть в том чтобы сервер отправляет пачки строго заданного размера пока не получит подтверждение о приходе всей пачки. И данные в пачке могут либо быть получены либо нет.
Дали исходники системы управления движением поездов... Там на все тачки структура какая-то очень важная мультикастом UDP рассылается (дошло-не дошло --- пофиг) целостность проверяется какой-то арифметической операцией ( пока не понял какой ) над данными, в результате получается число, которое и сравнивается на конечной машине