Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.16;
Скачать: CL | DM;

Вниз

Как отправить файл по сети?   Найти похожие ветки 

 
13-th Warrior   (2004-03-20 19:28) [0]

Может здесь кто нибуть поможет? Плиззз!
Как отправить файл по сети?


 
Rezya ©   (2004-03-21 17:11) [1]

Смотря каким образом ты хочешь это сделать.
ClientSocket or ServerSocket или WinApi Socket или какм либо другим способом?


 
13-th Warrior   (2004-03-21 18:32) [2]

Любым, лишь бы полегче


 
Yermek   (2004-03-23 23:00) [3]

Держи, ссылку не нашел так что...
99,9% работает

серверная часть

procedure SentFile;
var
 P: ^Byte;
 MS:TMemoryStrim
 j:Integer;
 ac:Integer;
begin
 // Создаём буфер клиента для файла
 MS := TMemoryStream.Create;
 // Загружаем файл в буфер
 MS.LoadFromFile("путь+имя файла");
 ServerSocket1.Socket.Connections[j].SendText("file#" + name + "#"+IntToStr(MS.Size)+"#");
 // Переводим каретку в начало файла
 MS.Position := 0;
 // Загружаем в переменную "P" файл
 P := MS.Memory;
 // Посылаем файл клиету
 ServerSocket1.Socket.Connections[0].SendBuf(P^, MS.Size);
 // записываем в журнал
end;


клиентская часть
 ...
 private
   Name: string; // Имя файла
   Size: integer; // Размер файла
   Receive: boolean; // Режим клиента
   MS: TMemoryStream; // Буфер для файла

{ процедура сохраняет принятые данные из сети в файл }
procedure Writing(Text: string);
begin
 // Если принято байт меньше размера файла, то записываем в буфер
 if MS.Size < Size then MS.Write(Text[1], Length(Text));
 // Выводим прогресс закачки файла
 Gauge1.Progress :=MS.Size;// MS.Size*100 div Size;
 //StatusBar1.SimpleText := "Принято "+IntToStr(MS.Size)+" из "+IntToStr(Size);
 // Если файл принят, то...
 if MS.Size = Size then
 begin
   Receive := false; // Переводим клиента в нормальный режим
   MS.Position := 0; // Переводим каретку в начало буфера
   MS.SaveToFile(name); // Сохраняем файл
   ClientSocket1.Socket.SendText("end"); // Посылаем команду "end", то есть файл принят
   MS.Free; // Убиваем буфер
   //StatusBar1.SimpleText := "Файл принят";
   Panel3.Visible:=false;
 end;
end;

procedure TfmSelectTest.ClientSocket1Read(Sender: TObject;
 Socket: TCustomWinSocket);
var
 sr_text: string; // Принятый текст
begin
 sr_text := Socket.ReceiveText;
 // Если клиент в режиме приёма файла, то...
 if Receive then
   // Записываем данные в буфер
   Writing(sr_text)
 // Если клиент не в режиме приёма файла, то...  
 else
   begin
     // если сервер посылает файл то...
     if Copy(sr_text,0,Pos("#",sr_text)-1)="file" then // Если это файл, то...
       begin
         // Создаём буфер для файла
         MS :=TMemoryStream.Create;
         // Определяем имя файла
         Delete(sr_text,1,Pos("#",sr_text));
         // Определяем имя файла
         Name :=Copy(sr_text,0,Pos("#",sr_text)-1);
         // Определяем размер файла
         Delete(sr_text, 1, Pos("#", sr_text));
         // Определяем размер файла
         Size := StrToInt(Copy(sr_text, 0, Pos("#", sr_text) -1));
         Panel3.Visible:=True;
         // Удаляем последний разделитель
         Delete(sr_text, 1, Pos("#", sr_text));
         // Выводим размер файла
         Label1.Caption := "Размер файла: "+IntToStr(Size)+" байт";
         // Выводим имя файла
         Label2.Caption := "Имя файла: "+Name;
         // Переводим сервер в режим приёма файла
         Receive := true;
         // Записываем данные в буфер
         Writing(sr_text);
       end;
   end;
end;


 
имя   (2004-03-24 00:57) [4]

Удалено модератором


 
Александр1 ©   (2004-03-24 20:20) [5]

Удалено модератором
Примечание: Оффтоп...



Страницы: 1 вся ветка

Текущий архив: 2004.05.16;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.025 c
7-1081164882
mfasakhov
2004-04-05 15:34
2004.05.16
Определить начало кадрового импульса


3-1082642735
RomCom
2004-04-22 18:05
2004.05.16
Поля с данными Null в TQuery+TUpdateSQL


14-1082652750
Кот-трахкун
2004-04-22 20:52
2004.05.16
Задачка


3-1082364543
Oleg_B
2004-04-19 12:49
2004.05.16
Шифрование/защита таблиц


8-1074102210
miek
2004-01-14 20:43
2004.05.16
Демка "Граффити"