Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как отправить файл по сети? [D6, D7, Win95/98, WinME, NT4, Win2k, WinXP]


13-th Warrior ©   (2004-03-20 19:28:00) 

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


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

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


  (2004-03-24 00:57:00) [2]

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


Yermek   (2004-03-23 23:00: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;


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

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


Rezya   (2004-03-21 17:11:00) [5]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо