Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-01-2009
JPMMVR JPMMVR is offline
Miembro
 
Registrado: feb 2008
Posts: 30
Poder: 0
JPMMVR Va por buen camino
Controlar Read/Write con TCP's

Queria plantear otro problemita que me ha surgido: resulta que tengo 2 aplicaciones, una Server y otra cliente e intento enviar una imagen entre ambos. Para esto utilizo la suit "FUNDAMENTALS 3 - SOCKETS". Pues resulta que al enviar de cliente a Server no hay problema, el server recibe bien el archivo, pero al reves no lo he podido lograr y me he dado cuenta de una cosa: Cuando el Cliente envia los bloques con "WriteBuf", estos bloques no se envian hasta que acabo de escribirlos todos.

El codigo es el siguiente

Código Delphi [-]
procedure Enviarfichero ( fichero:string; Sender: ATCPClient );
var
  Buffer: PByte;
  Leidos: Integer;

begin

  with TFileStream.Create(fichero,fmOpenRead or fmShareDenyWrite) do
  try
    GetMem(Buffer,BufferSize);
    try
      Leidos:= Read(Buffer^,BufferSize);
      while (Leidos > 0) do
      begin
        Sender.Stream.WriteBuffer(Buffer^,Leidos);
        Leidos:= Read(Buffer^,BufferSize);
      end;
    finally
      FreeMem(Buffer);
    end;
  finally
    Free;
  end;
end;

y en el Server tengo:
Código Delphi [-]
procedure RecibirArchivo ( fichero:string; Sender: TTCPServerClient );
var
  Buffer: PByte;
  Recibidos: integer;

begin

  with TFileStream.Create(fichero, fmCreate) do
  try
    GetMem(Buffer,BufferSize);
    try
      Recibidos:=Sender.Stream.Read(Buffer^,BufferSize);

      while Recibidos > 0 do
      begin
        WriteBuffer(Buffer^,Recibidos);
        Recibidos:=Sender.Stream.Read(Buffer^,BufferSize);
      end;
    finally
      FreeMem(Buffer);
    end;
  finally
    Free;
  end;
end;

Pero resulta que cuando quiero enviar a la inversa, es decir Server-Cliente, me surge un problema y es que cuando hago "WriteBuf", este bloque se envia inmediatamente y no espera a tener todo el fichero completo en el BUFFER como ocurre entre Cliente-Server. Esto lo se porque he puesto controles en ambos programas cuando reciben y envian y he podido detectar la inmediatez del envio.

En este caso, el codigo para enviar desde el server es el siguiente:

Código Delphi [-]
procedure Enviarfichero ( fichero:string; Sender: TTCPServerClient );
var
  Buffer: PByte;
  Leidos: Integer;

begin

  with TFileStream.Create(fichero,fmOpenRead or fmShareDenyWrite) do
  try
    GetMem(Buffer,BufferSize);
    try
      Leidos:= Read(Buffer^,BufferSize);
      while (Leidos > 0) do
      begin
        Sender.Stream.Writer.WriteBuffer(Buffer^,Leidos);
        Leidos:= Read(Buffer^,BufferSize);
      end;
    finally
      FreeMem(Buffer);
    end;
  finally
    Free;
  end;
end;

En todo caso lo que intento es lograr parar el envio del "WriteBuf" hasta no acabar de escribir todo el fichero.
Existe alguna manera de abrir y cerrar la comunicacion (sin cerrar la conexion entre ambos), es decir, como un grifo que pueda abrir y cerar segun me interese.?, seguro que en esto esta la clave.

No se si me he podido explicar correctamente, espero que alguien me pueda dar una luz al respecto.

Gracias

Última edición por JPMMVR fecha: 06-01-2009 a las 16:50:51.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Write and Read entre aplicaciones cmm07 Varios 3 30-01-2008 18:46:16
Uso de DIV y document.write Deiv HTML, Javascript y otros 3 08-12-2006 03:00:32
Error no permission for read-write access to database... JuanErasmo Conexión con bases de datos 0 06-12-2006 22:18:59
propiedades ¿READ, WRITE? jam888 Varios 8 11-01-2006 21:03:12
Como hacer una ZTable Read-Write pyanqn Varios 1 03-11-2005 20:21:43


La franja horaria es GMT +2. Ahora son las 16:39:21.


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