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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.05.2017, 09:45   #1
Rockot
Форумчанин
 
Аватар для Rockot
 
Регистрация: 01.06.2012
Сообщений: 139
По умолчанию Проблемы с отправкой файла

И так начну с базового:
Rad Studio XE 10.1
Indy - 10.6.2.5341

Бьюсь головой об стену упростил уже до нельзя, но никак не вижу проблемы, помогите, может чей-то здравый свежий взгляд увидит ошибку.

Процедура отправки:
Для верности делаю скрин, что бы точно отправлять Bitmap, так просто оказалось нагляднее
Код:
procedure TfClient.bntSendImgClick(Sender: TObject);
var
  SImg: TMemoryStream;
  bmp: TBitmap;
begin
  try
    if not TCPClientScreen.Connected then
      TCPClientScreen.Connect;
    SImg := TMemoryStream.Create;
    try
      bmp := TBitmap.Create;
      bmp.Width := Screen.Width;
      bmp.Height := Screen.Height;
      BitBlt(bmp.Canvas.Handle, 0,0, Screen.Width, Screen.Height,
             GetDC(0), 0,0,SRCCOPY);
      SImg.Position := 0;
      bmp.SaveToStream(SImg);

      SImg.Position := 0;
      TCPClientScreen.IOHandler.Write(SImg.Size);
      TCPClientScreen.IOHandler.Write(SImg);
    finally
      SImg.Free;
      TCPClientScreen.IOHandler.Close;
      TCPClientScreen.Disconnect;
    end;
  except
  end;
end;
Собственно, сервер, событие приёма:
Код:
procedure TfServer.TCPServerScreenExecute(AContext: TIdContext);
var
  Img: TMemoryStream;
begin
  Img := TMemoryStream.Create;
  try
    Img.Position := 0;
    AContext.Connection.IOHandler.ReadStream( Img, Img.Size, True );
    Img.Position := 0;
    Img.SaveToFile( 't.bmp' );
  finally
    Img.Free;
  end;
end;

Результат - отправляем 8 101 б, получаем 8 101б, но файл не открывается при попытки загрузить в TImage собственно логичная ошибка "Bitmap is not valid". Проанализировав файл как эксперт (блокнот), я понял, что заголовки у них разные, тысячу раз всё перепроверял, не вижу ошибки хоть убей.

Просьба ткнуть носом, заранее спасибо.
Следствие: 99% проблем, сваливаемых на Microsoft, является следствием тупости самих программистов.
Rockot вне форума Ответить с цитированием
Старый 09.05.2017, 11:17   #2
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Два раза пишешь, два раза и читать надо.
Код:
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var
  Img: TMemoryStream;
  Size:Integer;
begin
  Img := TMemoryStream.Create;
  try
    Img.Position := 0;
    Img.Size:=AContext.Connection.IOHandler.ReadInt64;
    AContext.Connection.IOHandler.ReadStream(Img, Img.Size, True );
    Img.Position := 0;
    Img.SaveToFile( 't.bmp' );
  finally
    Img.Free;
  end;
end;
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 09.05.2017, 17:59   #3
Rockot
Форумчанин
 
Аватар для Rockot
 
Регистрация: 01.06.2012
Сообщений: 139
По умолчанию

Так и думал, что ошибка на уровне ;. Спасибо огромное, видимо ночью был не внимателен.
Следствие: 99% проблем, сваливаемых на Microsoft, является следствием тупости самих программистов.
Rockot вне форума Ответить с цитированием
Старый 10.05.2017, 18:44   #4
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Лучше используйте компоненты TClientSocket и TServerSocket они просты в использовании, сам как то делал отправку скринов по таймеру этими компонентами, пример работы с этими компонентами есть в этой теме http://www.programmersforum.ru/showthread.php?t=306350

Индейские сокеты желательно не использовать для не протокольных соединений, бывают заморочки с правильностью их работы.

Последний раз редактировалось Aliens_wolfs; 10.05.2017 в 19:41.
Aliens_wolfs вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемы с отправкой почты через SMTP Григоренко Степан Компоненты Delphi 0 03.04.2012 07:52
Непонятные проблемы с отправкой письма. KPEATuBHO PHP 5 10.12.2011 19:29
Проблемы с отправкой http заголовка header() DeFace PHP 6 19.08.2011 17:03
Проблемы с Joomla отправкой писем Rusl92 WordPress и другие CMS 4 24.10.2010 03:02
Проблемы с отправкой СМС сообщений через Билайн tuschkan Компоненты Delphi 0 09.02.2009 10:50