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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.02.2009, 18:03   #1
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
По умолчанию TMemorystream -> TJPEGimage ( используя сеть )

Доброго времени суток !
Уважаемые форумчане ,у меня такая проблема : неправильно работает процедура приёма картинки .
Код:
procedure TForm1.UDPServerUDPRead(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle);
var
  str_buf : array[1..20] of Char;
//  jpeg:tjpegimage;

begin
  // если первый раз, то считываем данные об колличестве пакетов, которые нужно будет принять
  if first_=true then
  begin
    AData.Read(str_buf,length(str_buf));
    form2.ProgressBar1.Max := get_buffers;
    if copy(str_buf,1,10)='count_buf:' then
    get_buffers:=StrToInt(copy(str_buf,11,pos('#',str_buf)-11));
    if not  fileexists( extractfilepath(application.ExeName)+ 'screen.jpeg') then
    begin first_:=false;
    // и создаём поток 
    ServerStream := TMemoryStream.Create;
    end;
   end
   else
   begin
    get_buf_num:=get_buf_num+1;
    form2.ProgressBar1.Position:= get_buf_num;
    memo1.Lines.add('Получено байтов : '+ inttostr(adata.Size));
    ServerStream.Position:=ServerStream.Size;
    ServerStream.CopyFrom(AData,AData.Size);
    UDPServer.Send(abinding.peerip,1151,'accept');
    if get_buffers=get_buf_num then
    begin
       //showmessage(inttostr(serverstream.Size));
      ServerStream.SaveToFile(extractfilepath(application.ExeName)+ 'screen.jpeg');
       form2.Image2.Picture.LoadFromFile(extractfilepath(application.ExeName)+ 'screen.jpeg');
        deletefile( extractfilepath(application.ExeName)+ 'screen.jpeg');
      form2.bitbtn5.enabled := true;
      form2.Label1.Visible := false;
      get_buffers := 0; // обнулил на всякий случай
      get_buf_num := 0; //обнулил на всякий случай.
       ServerStream.Free;
    end;
  end;


end;
1 Раз срабатывает правильно , всё приходит , 2рой раз не получается.
Проблема именнно в клиенте .
Если получить 1 картинку , затем перезапустить клиент , и снова запросить , то всё ройдёт нормально столько раз сколько перезапущу.
Отсюда вывод , что дело в клиенте , и скорее всего я неправильно распорядился потоками ....

Вообще мне не важно каким способом из TMemoryStream запихать картинку в image. ( передётся в формате TJPEGimage )
Глобальные переменные
Код:
var
  first_       : boolean;
  get_buffers  : integer;
  get_buf_num  : integer;
  ServerStream : TMemoryStream;
ПОдскажите где я был не прав , или как сделать лучше??

Всем спасибо.
Lime вне форума Ответить с цитированием
Старый 16.02.2009, 22:11   #2
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

а разве у тебя создастся второй раз поток ?
Код:
    begin first_:=false;
    // и создаём поток 
    ServerStream := TMemoryStream.Create;
    end;
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 17.02.2009, 03:14   #3
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
По умолчанию

Цитата:
Сообщение от Квэнди Посмотреть сообщение
а разве у тебя создастся второй раз поток ?
Код:
    begin first_:=false;
    // и создаём поток 
    ServerStream := TMemoryStream.Create;
    end;
Большое СПАСИБО ! и действительно , раньше я присваивал first_:= true; в другом месте , но во время debug'a закоментил этот кусочек , что не позволялосоздавать поток )
Lime вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение текстового файла, используя локальную сеть NiXo Работа с сетью в Delphi 1 12.02.2009 22:56
Си используя циклы dimorik Общие вопросы C/C++ 0 11.11.2008 18:31
переместить память из TMemoryStream в промежуточный буфер и в буфере найти слова Дядя Фёдор Общие вопросы Delphi 2 02.10.2007 00:20