Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.06.2010, 20:19   #1
vitalatron
Пользователь
 
Аватар для vitalatron
 
Регистрация: 03.05.2009
Сообщений: 15
Злость TServerSocket, TClientSocket, передача изображения

Здравствуйте.
Многопользовательский графический редактор. При подключении клиента к серверу картинка на сервере должна передаться подключенному клиенту. Вместо этого программа вылетает без всяческих объяснений.

на приёме:
Код:
var buf: array [0..2000000] of char;
    len,i:integer;
    s,strm,strnf,strnt:string;
    cmd:char;
    data: TMemoryStream;
begin
  len:=Socket.ReceiveLength;
  Socket.ReceiveBuf(buf,len);
  cmd:=buf[0];
  case cmd of
...
try
  Data:=TMemoryStream.Create;
  Data.Write(buf[1], len);
  if Data.Size = len then
    begin
      Data.Position:= 0;
      Bmp.LoadFromStream(Data);
      Data.Free;
    end;
except
  Data.Free;
end;
на передаче:
Код:
var buf: array [0..2000000] of char;
    len,i:integer;
    s,strm,strnf,strnt:string;
    cmd:char;
    ms: TMemoryStream;
begin
  len:=Socket.ReceiveLength;
  Socket.ReceiveBuf(buf,len);
  cmd:=buf[0];
...
      ms:= TMemoryStream.Create;
      try
        USRS[0].Bmp.SaveToStream(ms);
        ms.Position:=0;
        buf[0]:='i';
        Socket.SendBuf(buf,1);
        Socket.SendStream(ms); //если закомментировать эту строку то ошибки не возникает
      except
        ms.Free;
      end;
Пробовал уже и топорно - взял код отсюда http://programmersforum.ru/showthread.php?t=16584 , из 4го поста, программа должна сохранять изображение в файл, передавать клиенту, клиент файл принимать, сохранять, открывает и выводить на экран, но опять таки программы завершаются крэшем - что клиент что сервер.
Помогите пожалуйста.
Вложения
Тип файла: zip prog.zip (32.5 Кб, 35 просмотров)

Последний раз редактировалось vitalatron; 18.06.2010 в 01:31.
vitalatron вне форума Ответить с цитированием
Старый 18.06.2010, 09:26   #2
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Используйте компоненты Indi будет проще намного
SERG1980 вне форума Ответить с цитированием
Старый 18.06.2010, 09:41   #3
vitalatron
Пользователь
 
Аватар для vitalatron
 
Регистрация: 03.05.2009
Сообщений: 15
По умолчанию

Придётся разбираться, как работать с Indi, потом и всю программу под него переделывать. Тяжко..

Не могли бы вы указать ссылку на простой пример работы Indi, на подобии того, который привёл Beermonza здесь и здесь?
vitalatron вне форума Ответить с цитированием
Старый 18.06.2010, 10:24   #4
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

я вам могу исходник свой дать по инди, как раз картинки передаю, только укажите версию инди(9 или 10). И лучше по сети передавать jpeg а не bmp а то это для сети напряжно.
Пример: передввал с сетевого компа его скрин к себе с частотой в 1 сек., загруженность сети с бмп было 15% а с жпег 1-2%
SERG1980 вне форума Ответить с цитированием
Старый 18.06.2010, 10:46   #5
vitalatron
Пользователь
 
Аватар для vitalatron
 
Регистрация: 03.05.2009
Сообщений: 15
По умолчанию

Не хотелось бы иметь потери качества.
А как посмотреть версию инди? Никогда с ними не работал.
vitalatron вне форума Ответить с цитированием
Старый 18.06.2010, 11:13   #6
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

У вас какая версия delphi?
ну и вот вам теория
Вложения
Тип файла: pdf IndyInDepth.pdf (1.01 Мб, 116 просмотров)

Последний раз редактировалось SERG1980; 18.06.2010 в 11:17.
SERG1980 вне форума Ответить с цитированием
Старый 18.06.2010, 11:15   #7
vitalatron
Пользователь
 
Аватар для vitalatron
 
Регистрация: 03.05.2009
Сообщений: 15
По умолчанию

Версия delphi 2007
vitalatron вне форума Ответить с цитированием
Старый 18.06.2010, 11:55   #8
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Цитата:
Сообщение от vitalatron Посмотреть сообщение
Версия delphi 2007
вот и у меня 2007, тогда думаю нормально будет. Вот набросал вам пример передачи картинки от сервера к клиенту
Вложения
Тип файла: zip 1.ZIP (868.7 Кб, 188 просмотров)
SERG1980 вне форума Ответить с цитированием
Старый 18.06.2010, 14:44   #9
kangreon
Форумчанин
 
Аватар для kangreon
 
Регистрация: 03.04.2009
Сообщений: 305
По умолчанию

Вот пример на TClientSocket и TServerSocket
Вложения
Тип файла: rar ClientServerSocket.rar (9.5 Кб, 249 просмотров)
kangreon вне форума Ответить с цитированием
Старый 18.06.2010, 21:28   #10
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

vitalatron, размер картинок какой? ...если примерно более 6К, то будет приходить кусками, ...у вас Data:=TMemoryStream.Create; стоит не понятно где, ...каждый раз обнуляя поток, а нужно создать при коннекте, и записывать в конец потока все что приходит подряд, пока размер потока не достигнет присланных заранее параметров, до отправки картинки.

Код:
// поток в конец
Data.Position := Data.Size;
// передаем буфер в поток
Data.WriteBuffer(buf, len);
buf - типа TByteArray. Сначала нужна команда "прими параметры граф. файла", клиент получив перейдет в режим приема пакетов, будет принимать в поток проверяя размер. Как размер будет нужным, перейти в режим обычный, а поток отправить для открытия картинки, установив позицию в 0 предварительно.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача файла через TClientSocket к TServerSocket и др. Le Celticant Работа с сетью в Delphi 2 12.06.2010 15:20
TServerSocket, TClientSocket prod87 Работа с сетью в Delphi 7 26.10.2009 22:38
TServerSocket и TClientSocket передача и прием файла Vovandows Работа с сетью в Delphi 2 24.09.2008 09:23
Передача файла через TServerSocket и TClientSocket Vanya Работа с сетью в Delphi 10 08.04.2008 18:12
Проблема с TClientSocket, TServerSocket PLOT_HD Работа с сетью в Delphi 4 11.08.2007 17:03