FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
ejemplo streams
hola,
se que al poner este post voy a recibir muchas criticas, las cuales acepto ya por adelantado, siendo consciente de que cara a muchos soy un jeta por no preguntar cosas concretas sobre streams y pedir un ejemplo en codigo. dicho esto necesitaria q alguien me mostrara el codigo para transferir por tcp un archivo de un servidor a un cliente y si no fuera mucha molestia que ademas sirviera para reanudar el stream en el punto en el q se quedo. Tampoco pido todo mascado se q eso es imposible, pero si me gustaria que la forma del stream estuviera explicada. pido el ejemplo ya que a traves de el, me es mas facil la comprension de los stream. gracias Última edición por zastilla fecha: 10-11-2004 a las 18:02:50. |
#2
|
|||
|
|||
explico un poco mas
Código:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, IdAntiFreezeBase, IdAntiFreeze, IdTCPConnection, IdTCPClient, IdBaseComponent, IdComponent, IdTCPServer; type TForm1 = class(TForm) IdTCPServer1: TIdTCPServer; IdTCPClient1: TIdTCPClient; IdAntiFreeze1: TIdAntiFreeze; Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; ProgressBar1: TProgressBar; Edit1: TEdit; Label1: TLabel; OpenDialog1: TOpenDialog; Button5: TButton; Label2: TLabel; Label3: TLabel; procedure Button1Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure IdTCPServer1Execute(AThread: TIdPeerThread); procedure Button5Click(Sender: TObject); procedure IdTCPClient1WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer); procedure IdTCPClient1Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer); private { Private declarations } FConnectionCount: Integer; FRequestCount: Integer; public { Public declarations } procedure IncrConnectionCount; procedure DecrConnectionCount; end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin idtcpserver1.Active:=true; end; procedure TForm1.Button4Click(Sender: TObject); begin opendialog1.Execute ; edit1.Text := opendialog1.FileName; end; procedure TForm1.Button3Click(Sender: TObject); begin idtcpserver1.Active:=false; end; procedure TForm1.Button2Click(Sender: TObject); var Command : String; SResponse: String; AStream: TfileStream; begin with idTCPClient1 do begin Connect; AStream := TfileStream.Create('c:\pepeddd.zip',fmCreate or fmOpenWrite ); try // request OUTLINE data WriteLn(edit1.text); { read all bytes until disconnected no length marker in stream } ReadStream(AStream, -1, true); finally Disconnect; AStream.Free; end; end; end; procedure TForm1.idTCPServer1Execute(AThread: TIdPeerThread); var SRequest: String; SOutline: String; AStream: TfileStream; begin with AThread.Connection do begin AThread.Synchronize(IncrConnectionCount); try SRequest := UpperCase(ReadLn); AStream := TfileStream.Create(srequest,fmOpenRead); OpenWriteBuffer; WriteStream(AStream); CloseWriteBuffer; AStream.Free; finally Disconnect; AThread.Synchronize(DecrConnectionCount); end; end; end; procedure TForm1.Button5Click(Sender: TObject); begin idtcpclient1.Disconnect; end; procedure TForm1.IncrConnectionCount; begin Inc(FConnectionCount); Inc(FRequestCount); label2.Caption := IntToStr(FConnectionCount); label3.Caption := IntToStr(FRequestCount); end; procedure TForm1.DecrConnectionCount; begin Dec(FConnectionCount); label2.Caption := IntToStr(FConnectionCount); label3.Invalidate; end; procedure TForm1.IdTCPClient1WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer); begin progressbar1.Max:= AWorkCountMax; end; procedure TForm1.IdTCPClient1Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer); begin progressbar1.Position:= AWorkCount; end; end. Bien he conseguido la primera parte pero cuando corto la comunicacion entre el servidor y el cliente el archivo que almacena se queda con un tamaño de 0 kb, hay alguna manera de evitar esto? ya que si quiero reanudar la descarga tendria q empezar desde el principio que estoy haciendo mal para que la progressbar1 no funcione? gracias Última edición por zastilla fecha: 11-11-2004 a las 13:30:45. |
|
|
|