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

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Помогите! 
:(
    Опции темы
The MASTER
  Дата 21.8.2004, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Old master)
**


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

Репутация: 2
Всего: 5



Помогите срочно, sample.gif по отсылке файлов по сети!
PM MAIL WWW ICQ   Вверх
Alex
Дата 21.8.2004, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



На вопрос "Как я могу отправлять файлы через TClientSocket & TServerSocket?" даём наш ответ smile.gif

Код
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 declarations }  
   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  
 // Посылаем команду для начала передачи файла.  
 Socket.SendText('send');  
end;  

procedure 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.


Взято с Исходников.ru http://www.sources.ru


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
The MASTER
Дата 23.8.2004, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Old master)
**


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

Репутация: 2
Всего: 5



Вообще-то это отсылка битмапов! sad.gif
PM MAIL WWW ICQ   Вверх
Vit
Дата 23.8.2004, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Тема закрыта! Научитись формулировать назнание темы правильно! Тут все хотят получить помощь


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
  
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

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

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

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


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

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


 




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


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

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