![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Задача вроде проста. Клиент отправляет файл на сервер, тот его сохраняет у себя. Обмен командами проходит как надо. Поток у клиента нормально создается, все хокей. А вот на сервере файл не появляется и все тут
![]() ![]() Код клиента: Код:
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. Последний раз редактировалось SergJ4, 13.02.2009 в 14:41. |
#2
|
|||
|
|||
![]() Разобрался вроде сам. Если кому понадобится сие дело, то добавил всего две строчки в клиент и изменил одну строчку сервера.
Для клиента: Код:
IdTCPClient1.IOHandler.WriteBufferOpen; IdTCPClient1.IOHandler.Write(mem); IdTCPClient1.IOHandler.WriteBufferClose; Код:
AContext.Connection.IOHandler.ReadStream(mem,-1,true); |