|
A diferencia del ServerSocket, que solo puede escuchar una instancia en un puerto, el clientSocket puede ejecutarse indistintamente para conectar a un mismo puerto, obteniendo el resultado esperado.
Y esto es asi porque cada conexion del ClientSocket, el puerto saliente que utiliza (local port) no necesariamente coincide (de hecho, nunca lo hace) con el numero de puerto destino al que va a conectarse. Esto se vuelve mas claro cuando, en una maquina que tenemos algun servidor instalado (un servidor web, por ejemplo) podemos ejecutar el IE (u otro, preferiblemente) y navegar sin problemas. Sabiendo que el IE realiza peticiones al puerto 80 del webserver destino, deberia sorprendernos que no entre en conflicto con "nuestro" puerto 80, el que hemos destinado para nuestro webserver, como si hubiesen dos puertos, uno para escuchar y otro para responder (siendo un mismo puerto capaz de hacer cualquiera de estas y otras cosas).
Ahora bien, la forma en que delphi, o el idTCPClient y tu aplicacion lo esta manejando, es lo que nos compete. Imagino que la asignacion (aleatoria) de los puertos que usamos de salida las hace el Sistema Operativo (he intentado hacer pruebas, y los numeros de puertos que me son asignados no siempre coinciden), asi que puedo valerme de eso para concluir, quizas erroneamente, que por cada instancia (o hilo) de tu aplicacion, puedes utilizar al menos un puerto. O sea, que haciendo tu aplicacion multihilos (multithreading) podrias obtener los resultados que dices ver en algunos clientes FTP.
Espero primero, estar cerca de lo cierto, y segundo haberte aclarado algo. Suerte!
__________________
Héctor Geraldino
Software Engineer
|