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 28-04-2010
jplj jplj is offline
Miembro
 
Registrado: oct 2003
Posts: 189
Poder: 21
jplj Va por buen camino
Thumbs up TIdTCPClient - Conocer cuanto hay en el bufer.

Hola:

Tengo algo similar a:
Código Delphi [-]
... FClient:= TIdTCPClient; ... // En el Execute de un Hilo while FClient.InputBuffer.Size > 0 begin
FClient.ReadStream(FStream, x); ...
end; ...

Lo que pretendo es ir leyendo fragmentos del bufer.
En primer lugar consulto si hay datos con InputBuffer.Size, pero siempre me devuelve 0 la primera vez, sin embargo si hago una lectura previa de, por ejemplo 1 byte, si me devuelve un valor correcto.

Realizo una comprobación previa con InputBuffer.Size, porque si realizo una lectura sobre un bufer que esté vacío, se produce una excepción y se cierra el cliente, cosa que quiero impedir.

Uso Delphi 7 / Indy 9

Muchas gracias de antemano.
__________________
Sonríe. Mañana puede ser peor.
Responder Con Cita
  #2  
Antiguo 30-04-2010
manuc manuc is offline
Miembro
 
Registrado: abr 2010
Posts: 165
Poder: 15
manuc Va por buen camino
Hola jplj,

La verdad es que entiendo bien lo que planteas.


Lo que puedes hacer es enviar un paquete al servidor, que este lo interprete y retorne otro paquete al cliente.

En Indy9, una de las estructuras lógica para hacerlo sería esta:

Servidor:
Código Delphi [-]
procedure TConexiones.idTCPServer(AThread: TIdPeerThread);
var
aStream:TMemoryStream;
begin
try
 if not AThread.Terminated and AThread.Connection.Connected then
    begin
    aStream := TMemoryStream.Create;
    AThread.Connection.ReadStream(aStream,-1,false);

    //Aquí Con aStream haces lo que quieras

    //Aquí retornas la respuesta; En este caso, contenida en un stream
     aThread.Connection.OpenWriteBuffer;
     aThread.Connection.WriteStream(aStream,true,true,aStream.Size);
     aThread.Connection.CloseWriteBuffer;

    FreeAndNil(aStream);
Except; 

end;//end-try

Estructura Cliente:

Código Delphi [-]
 TCPClient.WriteStream(aStream,true,true,aStream.Size); //Enviamos el paquete al servidor
 fTCPClient.ReadStream(fmsStream,-1); //Leemos la respuesta del servidor

Espero que te ayude.

Un saludo.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
¿Cuanto vale un nick? ¿Cuanto vale un mensaje? Delphius La Taberna 23 11-02-2008 18:40:08
Downloader con TidTCPClient JXJ Varios 0 23-05-2007 17:59:57
Problemas con TidTCPClient byfali Internet 1 29-03-2007 22:09:33
Problema con TIdTCPClient liadsoft Internet 2 12-05-2006 08:39:52


La franja horaria es GMT +2. Ahora son las 00:34:28.


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