Ver Mensaje Individual
  #2  
Antiguo 11-11-2004
zastilla zastilla is offline
Miembro
 
Registrado: sep 2004
Posts: 22
Reputación: 0
zastilla Va por buen camino
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.
Es un adaptacion minima del ejemplo de las indy. he añadido un tedit para especificar el archivo q quiero mandar/recibir. tanto el servidor como el cliente estan en el mismo ejecutable para simplificar las cosas.
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.
Responder Con Cita