PDA

Ver la Versión Completa : Evento de recepcion Client Socket


underwater
06-10-2008, 15:30:42
Buenos dias a todos!!!


Queria preguntar si hay alguna forma de crear un evento, para que un cliente socket, se encargue de recibir los datos de un servidor...

Especificamente lo que tengo es un servidor en el cual me tengo que loguear. Al loguearme a este, empieza a tirar datos al cliente que se logueo (los datos son solo caracteres)...

Mi problema esta en que tengo que estar, del lado cliente, ejecutando la funcion "Readln()" para que me traiga los datos del servidor... probe con las funciones "WorkBegin", "WorkEnd" y "Work"(de un componente TCPClient) pero ni se enteran de que algo esta pasando... a mi componente TCPClient lo uni a un "IdConnectionIntercept1" pero se me cuelga .. asi que no se que estare haciendo mal...


Lo que queria saber es principalmente si uno un componente "IdConnectionIntercept1" a un TCPClient, y ya me ahorro de hacer TCPClient.Readln()... y solo me encargaria de trabajar con las rutinas de "IdConnectionIntercept1"!!!


Gracias de antemano por leerlo..


saludos

Buena semana!!!

white_zombie
06-10-2008, 20:51:24
Hola, creo que estas trabajando con los componentes indy, no? Estos componentes no tienen eventos de recepción porque están preparados para trabajar de forma bloqueante, con lo cual lo ideal para trabajar con ellos es hacerlo con threads.

Un saludo

underwater
07-10-2008, 13:48:21
Si utilizo los indy!!!

asi que con threads es la solucion... bueno voy a ver que es lo que se me ocurre... gracias por la respuesta!!

saludos..

Delfino
08-10-2008, 16:46:25
Puedes usar el componente TIdCmdTCPClient en lugar del TIdTCPClient y asi recibes los datos del servidor en el evento OnBeforeCommandHandler en el parametro Data o mejor defines comandos y utilizas el evento OnCommand de cada uno..
Ese nuevo componente existe a partir de Indy10, en Indy9 el componente TIdTCPClient tenia incluido los comandos y sus eventos, o sea eran dos componentes en uno, o mejor dicho ahora son un componente dividido en dos..

Algun moderador tiene q mover este hilo al grupo Internet..

underwater
10-10-2008, 17:36:01
Esa no la tenia :D!!! muchas gracias...

Voy a descargar la version 10 de indy y la pruebo... muchas gracias por tu tiempo!!

Delfino
21-10-2008, 10:35:10
O puedes usar el componente TIdLogEvent y conectarlo con el componente TIdTCPClient para hacer uso de los eventos OnReceive y OnSend q tiene, para asociarlo se hace asi :
TCPClient.IOHandler.Intercept := LogEvent;