
13.02.2009, 10:27
|
Прохожий
|
|
Регистрация: 13.02.2009
Сообщения: 4
Репутация: 10
|
|
Indy 10. Обмен фаилами
Задача вроде проста. Клиент отправляет файл на сервер, тот его сохраняет у себя. Обмен командами проходит как надо. Поток у клиента нормально создается, все хокей. А вот на сервере файл не появляется и все тут  Пытался юзать WriteFile у клиента. Та же история. Где я тут затупил, товарищи!?
Код клиента:
Код:
unit SDIMAIN;
interface
uses Windows, Classes, Graphics, Forms, Controls, Menus,
Dialogs, StdCtrls, Buttons, ExtCtrls, ComCtrls, ImgList, StdActns,
ActnList, ToolWin, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
sysutils;
type
TSDIAppForm = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Button2: TButton;
OpenDialog1: TOpenDialog;
IdTCPClient1: TIdTCPClient;
Label1: TLabel;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
SDIAppForm: TSDIAppForm;
implementation
{$R *.dfm}
procedure TSDIAppForm.Button1Click(Sender: TObject);
var
f: file of byte;
fs,fn: string;
mem:TmemoryStream;
begin
IdTCPClient1.Host:=Edit1.Text;
AssignFile(f,Edit2.Text);
Reset(f);
fs:=inttostr(FileSize(f));
fn:=ExtractFileName(Edit2.Text);
CloseFile(f);
mem:=Tmemorystream.Create;
IdTCPClient1.Connect;
try
IdTCPClient1.IOHandler.WriteLn('send_file');
IdTCPClient1.IOHandler.WriteLn(fs);
IdTCPClient1.IOHandler.WriteLn(fn);
if IdTCPClient1.IOHandler.ReadLn()='ready' then begin //ready создан просто для проверки.Доходит ли до данного этапа прога. Доходит.
mem.LoadFromFile(Edit2.Text);
Label1.Caption:='ready';
IdTCPClient1.IOHandler.Write(mem);
mem.SaveToFile('D:\221.bmp'); //опять же для проверки. Есть ли что-то в потоке. Есть.
end;
finally
IdTCPClient1.Disconnect;
end;
mem.Free;
end;
procedure TSDIAppForm.Button2Click(Sender: TObject);
begin
if OpenDialog1.Execute then Edit2.Text:=OpenDialog1.FileName;
end;
end.
Код Сервера:
Код:
unit Сервер;
interface
uses Windows, Classes, Graphics, Forms, Controls, Menus,
Dialogs, StdCtrls, Buttons, ExtCtrls, ComCtrls, ImgList, StdActns,
ActnList, ToolWin, IdBaseComponent, IdComponent, IdCustomTCPServer,
IdTCPServer, idcontext, sysutils;
type
TSDIAppForm = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
IdTCPServer1: TIdTCPServer;
procedure FormCreate(Sender: TObject);
procedure IdTCPServer1Execute(AContext: TIdContext);
private
{ Private declarations }
public
{ Public declarations }
end;
var
SDIAppForm: TSDIAppForm;
implementation
{$R *.dfm}
procedure TSDIAppForm.FormCreate(Sender: TObject);
begin
IdTCPServer1.Active:=true;
end;
procedure TSDIAppForm.IdTCPServer1Execute(AContext: TIdContext);
var
comm,fs,fn:string;
mem: TmemoryStream;
begin
mem:=Tmemorystream.Create;
try
comm:=AContext.Connection.IOHandler.ReadLn();
Label1.Caption:=comm;
fs:=AContext.Connection.IOHandler.ReadLn();
Label2.Caption:=fs;
fn:=AContext.Connection.IOHandler.ReadLn();
Label3.Caption:=fn;
AContext.Connection.IOHandler.WriteLn('ready');
AContext.Connection.IOHandler.ReadStream(mem);
mem.SaveToFile('D:\21.bmp');
finally
AContext.Connection.Disconnect;
end;
mem.Free;
end;
end.
Admin: Для оформления кода используем тег "Код", а не "Цитата".
|