También uso tanto Indy como ICS.
La mayoría de las veces prefiero Indy porque la implementación de protocolos secuenciales con él es muy fácil (la solicitud se ejecuta en su propio hilo para que simplemente lea/escriba la conexión, realmente fácil). El uso de Indy requiere un conocimiento sólido de enhebrado y sincronización. A diferencia de Runner, me gusta cómo Indy usa Exceptions para manejar cosas "excepcionales" porque me permite concentrarme en el flujo normal del protocolo (utilizo los bloques try-finally para asegurarme de que desalojo los recursos).
También utilicé ICS en una aplicación donde Indy simplemente falló: la usé para una aplicación que implementa un proxy TCP/IP. El uso de ICS fue más simple debido a su naturaleza no bloqueante. Pude "proxy" protocolos TCP/IP de los que no sé nada, así que no tengo idea de cómo los bytes fluirían de un extremo a otro. Indy fracasó en ese escenario porque en Indy estás leyendo o estás escribiendo, no puedes hacer ambas cosas al mismo tiempo.El uso de ICS para implementar un protocolo de tipo secuencial es un poco doloroso: básicamente necesitas usar la lógica de máquina de estados, frenar el protocolo en pedacitos pequeños, mantener las banderas sobre ti para que sepas dónde estás en el protocolo. Una gran ventaja: François Piette, el autor de ICS, es activo y muy útil en una serie de foros y listas de correo, y es muy rápido para ayudar con cualquier cosa relacionada con ICS.
Para mí, si necesito hacer algo con TCP/IP, la ruta de decisión es muy simple: ¿Se puede hacer con Indy? Entonces es Indy. ¡Si no se puede hacer con Indy, entonces se hará con ICS!
Si bien también estoy a favor de Indy, creo que los exámenes de ICS son superiores. Especialmente Indy10 –
Totalmente de acuerdo. Indy10 es muy pobre en ejemplos. – Runner
@Runner Solo mira ASÍ QUE hay más preguntas relacionadas con el problema Indy que ICS. Tú eres el juez que es más estable. –