Модераторы: Snowy, Poseidon, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сокеты, Соединение TCP/IP 
:(
    Опции темы
Misha_White
Дата 14.5.2007, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 25.4.2007
Где: Кодинск

Репутация: нет
Всего: 1



Такая же проблема... А Картинку нельзя как картинку отправить? Типа TJPEGImage? И как отправить через TSocket  операцией Send а получить Recv? Вроде отправляет и получает, но при попытке обращения пишет ошибку доступа к памяти... Помогите пожалуйста... Курсовик горит... 
--------------------
Я не волшебник... я только учусь...  
PM MAIL ICQ Skype   Вверх
Snowy
Дата 14.5.2007, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Нет. Объект отправить нельзя.
Нужно сохранить в стрим и отправлять стрим.
Потом получить стрим и загрузить.
PM MAIL   Вверх
Misha_White
Дата 14.5.2007, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 25.4.2007
Где: Кодинск

Репутация: нет
Всего: 1



Со стримом такая же система... Уже замучился...

Добавлено через 1 минуту и 38 секунд
При получении не ругается, а при попытке загрузки из стрима - ошибка... smile 
--------------------
Я не волшебник... я только учусь...  
PM MAIL ICQ Skype   Вверх
Snowy
Дата 14.5.2007, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Значит неправильно передал или принял стрим.
PM MAIL   Вверх
Misha_White
  Дата 14.5.2007, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 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
--------------------
Я не волшебник... я только учусь...  
PM MAIL ICQ Skype   Вверх
Misha_White
Дата 14.5.2007, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 25.4.2007
Где: Кодинск

Репутация: нет
Всего: 1



 smile 
--------------------
Я не волшебник... я только учусь...  
PM MAIL ICQ Skype   Вверх
Snowy
Дата 14.5.2007, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Круто  smile 
Я ошибся - оказывается ты неправильно передаёшь и неправильно принимаешь smile
Я ж тебе говорю - нельзя передавать объекты.
Разницу между объектом и записью ощущаешь?
Тебя не смущает, что SizeOf(MyStream) равно 4 байта?
В твоём коде вообще всё неправильно. 
Нужно отправлять размер картинки перед передачей.
Перед приёмом нужно подготовить буфер и читать в него.
Причём, как передавать, так и читать нужно не объект, а данные.
Для MemoryStream это Memory и Size.
Посмотри хотя бы код в этом топике.
Почитай пример передачи картинки в DRKB
Попробуй поиск - передача картинки или файла обсуждалась неоднократно.

Добавлено через 3 минуты и 20 секунд
http://forum.vingrad.ru/forum/topic-112719/index.html
PM MAIL   Вверх
Misha_White
Дата 14.5.2007, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 25.4.2007
Где: Кодинск

Репутация: нет
Всего: 1



Спасибо, о сенсей! Че-то ничего не могу понять... Ща попробую поиск...
--------------------
Я не волшебник... я только учусь...  
PM MAIL ICQ Skype   Вверх
Snowy
Дата 14.5.2007, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Я ж тебе уже всё нашёл и линк дал  smile 
PM MAIL   Вверх
Misha_White
Дата 14.5.2007, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 25.4.2007
Где: Кодинск

Репутация: нет
Всего: 1



Спасибо! Ща буду разбираться... Сколько уже мучаюсь... В книжках только по TserverSocket and TClientSocket... и там вроде есть Метод SendStream... А их не использую... А DRKB, блин, 30 метров весит... Я его неделю буду качать... :-(

Добавлено через 13 минут и 50 секунд
Как все запущено... smile 
--------------------
Я не волшебник... я только учусь...  
PM MAIL ICQ Skype   Вверх
Misha_White
Дата 14.5.2007, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 25.4.2007
Где: Кодинск

Репутация: нет
Всего: 1



 smile 
--------------------
Я не волшебник... я только учусь...  
PM MAIL ICQ Skype   Вверх
Saygak
Дата 14.5.2007, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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) загружаю картинку из стрима.

Все. smile
PM MAIL ICQ   Вверх
Misha_White
Дата 14.5.2007, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 25.4.2007
Где: Кодинск

Репутация: нет
Всего: 1



Saygak, 
Спасибо! Но я не использую TServerSocket! У меня сокет типа TSocket... Отправлять могу только Send(), а получать Recv()... Вот такая проблема... smile 
--------------------
Я не волшебник... я только учусь...  
PM MAIL ICQ Skype   Вверх
Misha_White
Дата 14.5.2007, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 25.4.2007
Где: Кодинск

Репутация: нет
Всего: 1



Snowy,  
Если сначала отправлять размер картинки... и что, следом слать саму картинку? Но как узнать, что получать? Т.е. я же не знаю, картинка это или нет... Допустим мы сохраним размер в Integer переменной и отправим и что, сразу шлем картинку(стрим)? А в клиенте подрят получаем сначала размер стрима и следом сразу стрим что ли? Че-то ниче не пойму...
--------------------
Я не волшебник... я только учусь...  
PM MAIL ICQ Skype   Вверх
Snowy
Дата 14.5.2007, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Да, отправляем сначала размер стрима - 4 байта.
Потом сразу данные, указанного размера.
А клиент сидит и ждёт, пока ему пришлют 4 байта.
Получает, выделяет буфер и начинает читать, пока не прочитает указанное кол-во байт.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0838 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.