Передача файла по сети....

Модераторы: Romeo, Hawk, Absurd, WinMain, DeeJayC

Ответить
Sicrum
Сообщения: 1
Зарегистрирован: 18 мар 2008, 15:42

Передача файла по сети....

Сообщение Sicrum » 18 мар 2008, 16:11

В общем надо передавать файл джпег по сети (точнее несколько файлов, 8-16 штук подряд). Пакетами по 1024 байта. Первые 10 байт каждого пакета - это слово, определяющее назначение данных в пакете. Для работы в сети используются ТСерверСокет и ТКлиентСокет. Итак порядок действий:

• Клиент посылает запрос на рисунок
• Сервер делает следющее

- Высылает пакет с командой imagestart, именем и размером файла
- Высылает сам файл с командой imagebytes и остаток пакета наполняется 1014 байтами с файла. Разумеется это делается в цикле до конца файла. Получается много пакетов с заголовком imagebytes
- Высылает пакет imageend

Эти 3 шага тоже выполняются в цикле, но по числу отправляемых файлов

• Клиент делает следющие шаги в ответ на принятые

- imagestart. Создает поток связанный с файлом
- imagebytes. Записывает в открытый поток порцию полученных данных
- imageend. закрывает поток и соответственно файл

Вроде бы всё предельно просто, ТСР сохраняет и гарантирует порядок и доставку пакетов, НО...что получается на самом деле: пакеты доставляются странно. Некоторые рисунки передаются норм, а некоторые криво, причем очень. Но всегда передается правильно 1-2 первых пакета. Я пробовал ставить брейкпоинт на приемке imageend и к моменту первой остановки уже создается 3-5 файлов. Отсюда я сделал вывод что пакеты ПУТАЮТСЯ! то есть до того как придет первый Imageend приходит несколько Imagestart и потом все файлы сбиваются.

У кого какие идеи??? Как можно еще передавать рисунки пакетами по 1024 байта или мож я где то ошибся или недопонимаю что то?

Ответить