Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-11-2004
zastilla zastilla is offline
Miembro
 
Registrado: sep 2004
Posts: 22
Poder: 0
zastilla Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 11-11-2004
zastilla zastilla is offline
Miembro
 
Registrado: sep 2004
Posts: 22
Poder: 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
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 16:02:30.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi