![]() |
|
Модераторы: Snowy, Poseidon, MetalFan |
![]()
|
|
| Misha_White |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 207 Регистрация: 25.4.2007 Где: Кодинск Репутация: нет Всего: 1 |
Такая же проблема... А Картинку нельзя как картинку отправить? Типа TJPEGImage? И как отправить через TSocket операцией Send а получить Recv? Вроде отправляет и получает, но при попытке обращения пишет ошибку доступа к памяти... Помогите пожалуйста... Курсовик горит...
--------------------
Я не волшебник... я только учусь... |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
Нет. Объект отправить нельзя.
Нужно сохранить в стрим и отправлять стрим. Потом получить стрим и загрузить. |
|||
|
||||
| Misha_White |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 207 Регистрация: 25.4.2007 Где: Кодинск Репутация: нет Всего: 1 |
Со стримом такая же система... Уже замучился...
Добавлено через 1 минуту и 38 секунд При получении не ругается, а при попытке загрузки из стрима - ошибка... --------------------
Я не волшебник... я только учусь... |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
Значит неправильно передал или принял стрим.
|
|||
|
||||
| Misha_White |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 207 Регистрация: 25.4.2007 Где: Кодинск Репутация: нет Всего: 1 |
JpegIm:=TJPEGImage.Create;
MyStream:=TMemoryStream.Create; err:= recv(cSocket,MyStream,SizeOf(MyStream),0); If Err=Socket_Error then MessageBox(NULL,'Ошибка при получении!','Error',MB_OK); // MyStream.Seek(0,soFromBeginning); JpegIm.LoadFromStream(MyStream); // Здесь ругается!!! Image1.Picture.Assign(JpegIm); MyStream.Destroy; JpegIm.Destroy; А как? Добавлено @ 11:57 Записи же отправляются... Это сообщение отредактировал(а) Misha_White - 14.5.2007, 12:03 --------------------
Я не волшебник... я только учусь... |
|||
|
||||
| Misha_White |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 207 Регистрация: 25.4.2007 Где: Кодинск Репутация: нет Всего: 1 |
--------------------
Я не волшебник... я только учусь... |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
Круто
Я ошибся - оказывается ты неправильно передаёшь и неправильно принимаешь Я ж тебе говорю - нельзя передавать объекты. Разницу между объектом и записью ощущаешь? Тебя не смущает, что SizeOf(MyStream) равно 4 байта? В твоём коде вообще всё неправильно. Нужно отправлять размер картинки перед передачей. Перед приёмом нужно подготовить буфер и читать в него. Причём, как передавать, так и читать нужно не объект, а данные. Для MemoryStream это Memory и Size. Посмотри хотя бы код в этом топике. Почитай пример передачи картинки в DRKB Попробуй поиск - передача картинки или файла обсуждалась неоднократно. Добавлено через 3 минуты и 20 секунд http://forum.vingrad.ru/forum/topic-112719/index.html |
|||
|
||||
| Misha_White |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 207 Регистрация: 25.4.2007 Где: Кодинск Репутация: нет Всего: 1 |
Спасибо, о сенсей! Че-то ничего не могу понять... Ща попробую поиск...
--------------------
Я не волшебник... я только учусь... |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
Я ж тебе уже всё нашёл и линк дал
|
|||
|
||||
| Misha_White |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 207 Регистрация: 25.4.2007 Где: Кодинск Репутация: нет Всего: 1 |
Спасибо! Ща буду разбираться... Сколько уже мучаюсь... В книжках только по TserverSocket and TClientSocket... и там вроде есть Метод SendStream... А их не использую... А DRKB, блин, 30 метров весит... Я его неделю буду качать... :-(
Добавлено через 13 минут и 50 секунд Как все запущено... --------------------
Я не волшебник... я только учусь... |
|||
|
||||
| Misha_White |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 207 Регистрация: 25.4.2007 Где: Кодинск Репутация: нет Всего: 1 |
--------------------
Я не волшебник... я только учусь... |
|||
|
||||
| Saygak |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 2.5.2007 Репутация: нет Всего: 1 |
Привет Misha_White, у меня тоже была проблема. Тебе надо отправлять картинку?
Я уже ковырятся с этим. Как я делаю: в событии OnRead у ServerSocket - сохряняю картинку в стрим (у меня TMemoryStream) - оправляю строку 'Size:'+TStream.Size+#0; (Socket.SendText(...)) - потом отправляю стрим (Soket.SendStream(...))(не вызывай после этой строки метод Free стрима) на клиенте при OnRead у ClientSocket - получаю строку (например 'Size:4000'#0) создаю TMemoryStream, строковую переменную, и инициализирую переменные (размер получаемых данных(DataSize из строки 'Size:4000'#0), и логическую переменную(Recived) что начат прием данных). при слудующем приеме данных если Recived = true тогда записываю данные из полученной строки в стрим, как только размер полученных данных (TStream.Size) равен размеру получаемых данных (DataSize) загружаю картинку из стрима. Все. |
|||
|
||||
| Misha_White |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 207 Регистрация: 25.4.2007 Где: Кодинск Репутация: нет Всего: 1 |
Saygak,
Спасибо! Но я не использую TServerSocket! У меня сокет типа TSocket... Отправлять могу только Send(), а получать Recv()... Вот такая проблема... --------------------
Я не волшебник... я только учусь... |
|||
|
||||
| Misha_White |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 207 Регистрация: 25.4.2007 Где: Кодинск Репутация: нет Всего: 1 |
Snowy,
Если сначала отправлять размер картинки... и что, следом слать саму картинку? Но как узнать, что получать? Т.е. я же не знаю, картинка это или нет... Допустим мы сохраним размер в Integer переменной и отправим и что, сразу шлем картинку(стрим)? А в клиенте подрят получаем сначала размер стрима и следом сразу стрим что ли? Че-то ниче не пойму... --------------------
Я не волшебник... я только учусь... |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
Да, отправляем сначала размер стрима - 4 байта.
Потом сразу данные, указанного размера. А клиент сидит и ждёт, пока ему пришлют 4 байта. Получает, выделяет буфер и начинает читать, пока не прочитает указанное кол-во байт. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Сети" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |