Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Мастера DELPHI. Новости мира компонент, FAQ, статьи...


Информационный Канал Subscribe.Ru

Ежедневная рассылка сайта Мастера DELPHI

DELPHIMASTER.ru

Выпуск от 29.07.04 09:18

Лучшее из нашего FAQ   |x|
Простой способ отправки файлов при помощи TClientSocket & TServerSocket

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 ScktComp, ExtCtrls, StdCtrls;

type
 TForm1 = class(TForm)
   Image1: TImage;
   Image2: TImage;
   ClientSocket1: TClientSocket;
   ServerSocket1: TServerSocket;
   Button1: TButton;
   procedure Image1Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
   procedure ClientSocket1Connect(Sender: TObject;
     Socket: TCustomWinSocket);
   procedure ServerSocket1ClientRead(Sender: TObject;
     Socket: TCustomWinSocket);
   procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
 private
   { Private decla rations }
   Reciving: boolean;
   DataSize: integer;
   Data: TMemoryStream;
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Image1Click(Sender: TObject);
begin
 // Это процедура для открытия сокета на ПРИЁМ (RECEIVING).
 // Button1.Click is this procedure as well.
 ClientSocket1.Active:= true;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 // Открытие ОТПРАВЛЯЮЩЕГО (SENDING) сокета.
 ServerSocket1.Active:= true;
end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
 Socket: TCustomWinSocket);
begin
 // Посылаем команду для начала передачи файла.
&nb sp;Socket.SendText('send');
end;

proce! dure TForm1.ClientSocket1Read(Sender: TObject;
 Socket: TCustomWinSocket);
var
 s, sl: string;
begin
 s:= Socket.ReceiveText;
 // Если мы не в режиме приёма:
 if not Reciving then
 begin
   // Теперь нам необходимо получить длину потока данных.
   SetLength(sl, StrLen(PChar(s))+1); // +1 for the null terminator
   StrLCopy(@sl[1], PChar(s), Length(sl)-1);
   DataSize:= StrToInt(sl);
   Data:= TMemoryStream.Create;
   // Удаляем информацию о размере из данных.
   Delete(s, 1, Length(sl));
   Reciving:= true;
 end;
 // Сохраняем данные в файл, до тех пор, пока не получим все данные.
 try
   Data.Write(s[1], length(s));
   if Data.Size = DataSize then
   begin
     Data.Position:= 0;
     Image2.Picture.Bitmap.LoadFromStream(Data);
     Data.Free;
     Reciving:= false;
     Socket.Close;
   end;
 except
   Data.Free;
 end;
end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
 Socket: TCustomWinSocket);
var
 ms: TMemoryStream;
begin
 // Клиент получает команду на передачу файла.
 if Socket.ReceiveText = 'send' then
 begin
   ms:= TMemoryStream.Create;
   try
     // Получаем данные на передачу.
     Image1.Picture.Bitmap.SaveToStream(ms);
     ms.Position:= 0;
     // Добавляем д лину данных, чтобы клиент знал, сколько данных будет передан! о
     // Добавляем #0 , чтобы можно было определить, где заканчивается информация о размере.
     Socket.SendText(IntToStr(ms.Size) + #0);
     // Посылаем его.
     Socket.SendStream(ms);
   except
     // Итак, осталось освободить поток, если что-то не так.
     ms.Free;
   end;
 end;
end;

end.

Автор М.К.

»»» Прислать свои комментарии

Обсуждается в конференциях   |x|
У нас большой выбор статей   |x|
Работа с COM-портами под Windows
Практически любому компьютеру приходится связываться с внешними устройствами. Практически любому программисту приходилось (приходится, придется) ваять программы под эти устройства. Огромное количество внешних устройств общаются с компьютером посредством RS-232. Отсюда и огромное количество вопросов от начинающих разработчиков. Количество вопросов на тему "как мне записать/принять данные с com-порта" на форумах по программированию не убывает, а скорее растет. Именно количество этих вопросов побудило меня к написанию статьи. Хотелось бы подчеркнуть, что статья предназначена именно для новичков в этом вопросе, и соответственно я старался упростить изложение материала.
Новинки книжного рынка   |x|
Базы данных в Delphi 7. Самоучитель
В этой книге урок за уроком описывается работа с базами данных. Демонстрируются широкие возможности по созданию интерфейса пользователя и рассказывается о большом наборе стандартных компонентов, с помощью которых можно создавать приложения достаточно высокого уровня сложности. Самоучитель предназначен для читателей, знакомых с основами объектно-ориентированного программирования и уже имеющих опыт написания простых программ в среде Delphi.
Автор: Понамарев В. А.
Опрос населения :)
Какой раздел сайта вам больше нравится?
»»» FAQ
»»» Статьи
»»» Новости мира компонент
»»» Форумы
»»» Компоненты
»»» База по другим сайтам
Для души

Хокку дня
Паучек на паутинке
Листочек желтый догоняет
Прощаются с летом

Афоризмы
В России надо жить долго, тогда что-нибудь получится (Корней Чуковский)

Фраза дня
Грудь - это лицо женщины!

Дурацкие законы (информация предоставлена сайтом kurilka.com)
В Дании прежде чем завести машину вы должны:
- проверить исправность фар, тормозов, руля и клаксона.
- убедиться, что под ней нет детей.
В Монтане (США) женщине грозит тюрьма, если она вскроет почту мужа

И на закуску коротенький анекдот
Чем дольше общаешься с девушками - тем сильнее понимаешь голубых.

Фотоприколы.
Начните день с хорошего настроения!
http://www.delphimaster.ru/cgi-bin/prikol.pl?id=3753662


На этом позвольте откланяться и пожелать вам удачного дня.
Искренне ваш, Алексей (merlin@delphimaster.ru)

Добро пожаловать на сайт -= Мастера DELPHI =- 

http://subscribe.ru/
http://subscribe.ru/feedback/
Адрес подписки
Отписаться

В избранное