| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Сети > Передача картинки по UDP одним пакетом |
| Автор: Max_Rendel 10.5.2008, 09:17 | ||||
| Поправте пожалуйста! Задумка: По нажатию кнопки, клиент предаёт картинку серверу одним пакетом (!!!обязательно не сохраняя её предварительно на диске!!! размер картинки от 3кб до 20кб), после принятия картинки сервер помещает её в Image1. Вот клиент:
Вот сервер:
На сервре выскакиает ошибка: JPEG error #42 Что я делаю не так? |
| Автор: Exai1e 11.5.2008, 16:06 |
| а размер посланный и принятый сверял ? мб теряется заголовок Добавлено @ 16:07 попробуй сохранить принятые данные в стим/фаил и открыть win средствами |
| Автор: Max_Rendel 12.5.2008, 02:05 |
| Exai1e, да размер замерял перед отправкой и после. Самое интересное, что всё в порядке... Пробывал сохранять в TFileStream (на диск), его размер 0. Может что не так с отправкой и приёмом делаю?????? Может каким другим способом сделать???? Но без сохранения файла на диск! |
| Автор: Max_Rendel 12.5.2008, 11:05 | ||||
| MetalFan, 1) Indy (кот. по умолчанию стоит в Delphi7) 2) не понял замечания???? Поподробней пожалуйста… 3)
Пробывал делать так после сохранения в стрим:
4) Тогда что???? |
| Автор: ksili 12.5.2008, 11:15 | ||||
Может между
и
надо сделать задержку? А-то оно ещё отправляется, а вы его сразу удаляете... |
| Автор: Max_Rendel 12.5.2008, 11:38 | ||
| ksili сделал, и не чего не поменялось. Я уже немного изменил вид кода и избавился от JPG (пока не разберусь), вместо него отправляю маленький Bitmap. Вот как он выглядит:
Ошибка больше не вылетает, но Image всё равно не отображает картинку. Но пока всё без результатно... |
| Автор: ksili 12.5.2008, 11:47 |
| TM.Size в клиенте и в сервере одинаковый? Добавлено через 34 секунды А это всё на одном компе происходит? |
| Автор: Max_Rendel 12.5.2008, 12:05 |
Да. Для отладки я сделал всё в одной проге, но пробывал и на сервер - клиент. |
| Автор: ksili 12.5.2008, 12:15 | ||
| А проверял в TMemoryStream->Memory и AData именно байты твоей картинки после чтения? можно проверить несколько первых байт. Может ещё попробовать использовать не метод UDPRead, а событие OnUDPRead? Добавлено @ 12:20 С потоками ещё вроде такой косяк, что нулевой байт считается концом потока (а в BMP это просто чёрный цвет). Так что может быть при загрузке
до конца не грузится из-за того, что встречается именно такой байт. Тогда надо будет грузить не так, а копируя блок памяти, например при помощи memcpy. Только не забудь тогда выделить вручную память под Image2.Picture.Bitmap. |
| Автор: ksili 12.5.2008, 12:34 |
| Кстати, до чтения картинки, размеры Image2 не нулевые случайно? Если так, то возможно придётся вручную выставлять размеры его канвы, а возможно и самого битмапа |
| Автор: Max_Rendel 12.5.2008, 16:06 | ||
Это как? |
| Автор: MetalFan 12.5.2008, 18:09 |
так там багов выше крыши. скачай и поставь по-свежее. Добавлено через 6 минут и 34 секунды ты говоришь, что выскакивает jpeg error, т.е. выполняется приведенная мной венка твоего кода но при сохранении в файл размер 0. значит не так сохраняешь. не знаю что там было в древних индейцах, но наверняка не TStream |
| Автор: Max_Rendel 13.5.2008, 03:48 |
| У кого не будь есть пример отправки по UDP файла без предварительного сохранения на диск??????? (в любой версии Indy, только укажите её) PLZ А товсем нечего не получается...... |
| Автор: Max_Rendel 14.5.2008, 10:04 | ||||
| Ну вроде дела сдвинулись. Но опять же с проблемами… Вот код:
Всё работает, но в этой программе и сервер и клиент находятся на одной форме, т.е. в одной программа. А когда я делаю отдельно сервер и клиент, те ничего не работает. На сервере выскакивает ошибка (Вот она http://ipicture.ru/uploads/080514/gxtqW9itSY.jpg), в тот момент когда я начинаю грузить принятые данные в Image2.
Замерял размер до отправки и после, всё OK. Проверял побайтно, всё OK. Что я не так делаю????? |
| Автор: MetalFan 14.5.2008, 11:14 |
кто тебе такой бред подсказал? |
| Автор: Max_Rendel 14.5.2008, 12:45 |
Сам придумал. А как правельно загрузить данные в Image2.Picture.Bitmap? |
| Автор: Max_Rendel 15.5.2008, 03:40 | ||||
| ВСЁ ПОЛУЧИЛОСЬ!!! Клиент:
Сервер:
Один нюанс: Размер буфера должен быть больше чем передаваемый файл. Всем кто принимал участие, БОЛЬШОЕ СПОСИБО! |
| Автор: LeonW 14.11.2011, 08:49 | ||
Здравствуйте! может кто подсказать как правельно отправить хотябы по 64кб через УДП Спасибо!.
с этим кодом будут ошибки вылетать |