Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   TTcpClient y TTcpServer (https://www.clubdelphi.com/foros/showthread.php?t=47351)

b3nshi 25-08-2007 02:01:07

TTcpClient y TTcpServer
 
Mi pregunta creo q dentro de todo es sencilla... quisiera saber si puedo hacer un chat en red con estos componentes... vi un ejemplo en la web de Seoane para enviar un fichero, la pregunta es como seria en red? Es exactamente lo mismo pero con una IP de la red verdad?

Y si hay alguien q me pueda explicar como es q se envia un fichero... porq por ejemplo a esta porcion del codigo (del programa de seoane) no logro entenderla... Estuve leyendo un poco sobre la clase TFileStream, pero aun asi no termino de entender la idea de Buffer... alguien q me pueda explicar?


Código Delphi [-]
procedure TEnvio.Execute;
var
  Buffer: PByte;
  Leidos: Integer;
begin
  inherited;
  with TFileStream.Create(FLocalFile,fmOpenRead or fmShareDenyWrite) do
  try
    GetMem(Buffer,BufferSize);
    try
      FCliente.Active:= TRUE;
      try
        FCliente.Sendln(FRemoteFile);
        Leidos:= Read(Buffer^,BufferSize);
        while (Leidos > 0) and not Terminated do
        begin
          FCliente.SendBuf(Buffer^,Leidos);
          Leidos:= Read(Buffer^,BufferSize);
        end;
      finally
        FCliente.Active:= FALSE;
      end;
    finally
      FreeMem(Buffer);
    end;
  finally
    Free;
  end;
end;

Muchas Gracias!

{Saludos}

MaMu 26-08-2007 14:10:46

Cita:

Empezado por b3nshi (Mensaje 226019)
pero aun asi no termino de entender la idea de Buffer... alguien q me pueda explicar?

Muchas Gracias!

{Saludos}

Yo lo interpreto como un puntero al tamaño del archivo, mientras este es leido, es enviado, hasta que se termine de leer.

Saludos

b3nshi 26-08-2007 16:18:41

Bien... digamos q lo q hago en el codigo es ir leyendo parte por parte el archivo, buffer contiene el tamaño del archivo, entonces en el leidos voy cargando por partes mi archivo? Asi seria?

Por ejemplo yo puedo hacer algo asi?

Código Delphi [-]
var
archivo: FILE of byte;
contenido, enviando : ansistring;
tam, i, tamenvio : integer;
begin
{Archivo Basico}
try
   AssignFile(archivo, "miarchivo.ext");
   Reset(archivo); // intentar abrirlo
Except On Exception do
   begin
   try
      {Error: el archivo no existe o esta en uso}
      exit;
   end; 
   end;
end;
 
{Creo el componente para el envio y bueno... se lo configura}
cliente:= TTCPClient.Create(nil);
...
 
{Ahora voy leyendo por parte}
tam := strlen(archivo);
seek(archivo,0);
read(archivo, contenido); //Aqui cargo todo el archivo
closefile(archivo); //Ya no lo necesito
 
for i := 0 to tam do //Recorro la variable contenido hasta el final
begin
if (i + tamenvio) < tam then
 begin
  enviando := copy(contenido, i, tamenvio);
 end
 else
 begin
  enviando := copy(contenido, i, tam - i);
 end;
cliente.sendln(enviando);//Envio por parte el archivo
i := i + tamenvio; //Incremento la variable
end;
end;

Bueno supongo q algo mal tiene q haber en el codigo pero lo escribi de memoria... ahora mi pregunta es... puedo hacerlo de esta forma?

No se si se entendio pero la idea de esta forma es ir leyendo el archivo en partes como si fuera cadena de texto y la pc q lo reciba va a tener q ir armandolo al archivo en partes tambien...

Si es asi cuales son las ventajas y desventajas de hacerlo de esta forma?

Muchas Gracias por tu respuesta :D
{Saludos}

MaMu 27-08-2007 04:19:14

La verdad es que podria haber muchas, pero siempre depende de que trate la aplicacion. Un verdadera ventaja, desde mi punto de vista, es muy comodo para usar un progressbar e informar del envio. El hecho de enviarlo por partes me parece lo mejor, sobre todo para volumenes de datos muy grandes (no exesivos).
Y por sobre todas las cosas, porque es codigo de Seoane, y la verdad que todo lo que el ha publicado, es claro, completo, y siempre funciona :D.

Saludos

b3nshi 27-08-2007 18:48:46

Buen punto no? Eso de seoane es verdad... sus codigos son muy buenos y efectivos...

Y ahora otra pregunta... digamos q continuando con este tema... si yo por ejemplo quiero crear una aplicacion en red, con una base de datos en el servidor no mas, pero esa base de datos va a ser un XML, como puedo hacer para compartirlo? Tendria q enviarlo al cliente cada vez q este lo quiera utilizar?

Muchisimas Gracias!

{Saludos}

MaMu 28-08-2007 03:20:51

Todo depende de que es lo que sea tu aplicación, que motor de base de datos vas a usar? de que trata la aplicacion?

Saludos

b3nshi 29-08-2007 22:34:03

Perdon por la demora en contestar... estuve estudiando mucho rindo una materia libre dentro de 2 dias y bueno... toy medio preocupado...

En cuanto a mi aplicacion, es para sacar turnos, para un taller, digamos q no voy a utilizar un motor de base de datos, solo voy a utilizar un XML, q voy a manejarlo con TXmlDocument, se entiende?

Por eso si yo quiero hacer una consula desde otra pc, o por ejemplo quiero ver todos los turnos disponibles y los turnos ya dados, como podria hacerlo?

Tendria q enviarme el archivo cada vez q quiera ver todo y cuando quiera consultar por un solo horario seria una consulta enviando por ejemplo: "componente.sendln(consulta)" y q el servidor me devuelva una cadena de texto con la info?

Muchas Gracias!

{Saludos}


La franja horaria es GMT +2. Ahora son las 05:32:45.

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