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

Вниз

Мастера!!! как програмным путём передать файл.* по сети...   Найти похожие ветки 

 
KvORubin ©   (2005-12-17 18:02) [0]

Мастера!!! как програмным путём передать файл.* по сети...

Допустим имеется программа сервер и клиент, модэмное соединение производится по городской линии.
связь меж программами IdTCPServer1 и IdTCPClient1
Задача: передать файл с сервера к клиенту..
Подскажите конкретно какой компонент может этим заняться.. или это программно??? как???


 
KvORubin ©   (2005-12-17 19:47) [1]

Удалено модератором
Примечание: Создание пустых сообщений


 
Sysanin   (2005-12-17 21:55) [2]

эээээ, тебя интересует имено передача файла между компонентами IdTCPServer1 и IdTCPClient1? Или ещё как можно заставить модем подключиться к другому, а потом переслать файл? С первым пунктом мона попробовать так: Читаешь строку из файла например клиентом, потом её передаешь серверу; сервер получил строку и добавил её во временый файл. И так повторяешь пока клиент не прочитает весь файл. А с временым файлом на серве уже делаешь то что надо (копируешь куда надо, переименовываешь и т. д.). Не гарантирую что это способ самый рациональный, надёжный и быстрый, но не слишком тяжёл в осуществлении. Кажись делфи может пересылать файловые потоки (что в даном случае пожалуй рациональней), но я с ними не разбирался по этому помочь не могу. :(


 
kvorubin ©   (2005-12-20 06:32) [3]

Спасибо, только как можно прочитать построчно файл, если он не загружается допустим в мемо1, или же есть какая-то переменная, в которую можно забросить содержимое файла???
И как с этой переменной выдернуть именно строку и кинуть в другую переменную для отправки???


 
Жлопопупсик   (2005-12-20 09:58) [4]

unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   ClientSocket1: TClientSocket;
   ServerSocket1: TServerSocket;
   btnTestSockets: TButton;
   procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
   procedure FormCreate(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
   procedure ClientSocket1Disconnect(Sender: TObject;
     Socket: TCustomWinSocket);
   procedure ClientSocket1Connect(Sender: TObject;
     Socket: TCustomWinSocket);
   procedure ServerSocket1ClientConnect(Sender: TObject;
     Socket: TCustomWinSocket);
   procedure btnTestSocketsClick(Sender: TObject);
 private
   FStream: TFileStream;
   { Private-Deklarationen }
 public
   { Public-Deklarationen }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ClientSocket1Read(Sender: TObject;
 Socket: TCustomWinSocket);
var
 iLen: Integer;
 Bfr: Pointer;
begin
 iLen := Socket.ReceiveLength;
 GetMem(Bfr, iLen);
 try
   Socket.ReceiveBuf(Bfr^, iLen);
   FStream.Write(Bfr^, iLen);
 finally
   FreeMem(Bfr);
 end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 FStream := nil;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 if Assigned(FStream) then
 begin
   FStream.Free;
   FStream := nil;
 end;
end;

procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
 Socket: TCustomWinSocket);
begin
 if Assigned(FStream) then
 begin
   FStream.Free;
   FStream := nil;
 end;
end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
 Socket: TCustomWinSocket);
begin
 FStream := TFileStream.Create("c:\temp\test.stream.html", fmCreate or fmShareDenyWrite);
end;

procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
 Socket: TCustomWinSocket);
begin
 Socket.SendStream(TFileStream.Create("c:\temp\test.html", fmOpenRead or fmShareDenyWrite));
end;

procedure TForm1.btnTestSocketsClick(Sender: TObject);
begin
 ServerSocket1.Active := True;
 ClientSocket1.Active := True;
end;

end.


 
Бомбермен   (2005-12-20 09:59) [5]

Здесь мы рассмотрим посылку файлов через сокет. Итак, как же послать файл по сокету? Очень просто! Достаточно лишь открыть этот файл как файловый поток (TFileStream) и отправить его через сокет (SendStream)! Рассмотрим это на примере:

{Посылка файла через сокет}
procedure SendFileBySocket(filename: string);
var
 srcfile: TFileStream;
begin
 {Открываем файл filename}
 srcfile := TFileStream.Create(filename,fmOpenRead);
 {Посылаем его первому подключенному клиенту}
 ServerSocket1.Socket.Connections[0].SendStream(srcfile);
 {Закрываем файл}
 srcfile.Free;
end;



Нужно заметить, что метод SendStream используется не только сервером, но и клиентом (ClientSocket1.Socket.SendStream(srcfile))


 
KvORubin ©   (2005-12-20 10:00) [6]

Спасибо, попробую.



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

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

Наверх




Память: 0.48 MB
Время: 0.049 c
15-1141749259
ArtemESC
2006-03-07 19:34
2006.04.02
JavaScript - как напечатать в данном месте стр. строку?


1-1141236048
X-Man
2006-03-01 21:00
2006.04.02
Заставить exe на Delphi грузить dll на c++


1-1140940887
Paha
2006-02-26 11:01
2006.04.02
TICQClient и сообщения с мобильника


15-1141896643
leonidus
2006-03-09 12:30
2006.04.02
Процедуры и функции для работы с Widestring


2-1142520097
Fenix
2006-03-16 17:41
2006.04.02
Динамически создать ListView