![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|
|
#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. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
|