Ver Mensaje Individual
  #5  
Antiguo 28-04-2010
sur-se sur-se is offline
Miembro
 
Registrado: may 2003
Posts: 212
Reputación: 22
sur-se Va por buen camino
Hola. El protocolo con el servidor es sencillo. Sólo unos cuantos tipos de envíos del cliente al servidor con su correponsdiente ACK por parte del servidor.
El problema es cuando el servidor decide iniciar el envío de datos al cliente sin petición previa de esté.
Una solución podría ser como dices poner el cliente en lectura, y esta es en sí la cuestión de la pregunta. ¿Como pongo al cliente en lectura? Pues el idTCPServer tiene un evento OnExcute que se dispara al recibir datos, pero en el idTCPClient no hay.
Ahora mismo, resumiendo, se me ocurren dos posibilidades:
- Temporizador que cada cierto tiempo (milisegundos) compruebe si hay datos, y si los hay los procese.
- idConnectionIntercep evento OnReceive, que captura las tramas antes del IdTCPClient por lo que podría analizar la cabecera y determinar si el tipo de paquete es respuesta a un comando del cliente o se trata de una comunicación de comando por parte del servidor.

Afortunadamente el protocolo es bastante sencillo y son pocos tipos de tramas los que se envían entre cliente y servidor.
Pero en caso de un sistema de comunicaciones más complejo, no veo la opción a establecer una conexión TCP totalmente bidireccional en igualdad de rangos, es decir, ambos extremos de la conexión actúan como clientes o como servidores según necesiten.
Un saludo
Responder Con Cita