En mi opinión personal, creo que ninguno de los que mencionas,
manejar un socket y hacer un "parser" de html que extraiga links,
obtenga los siguientes URLs, etc, sería una operación muy compleja
en Java, C++, etc.
Para este tipo de aplicaciones te sugiero un lenguaje script,
como Perl, Python, Tcl, etc. En menos tiempo desarrollas este tipo de
aplicaciones con estos lenguajes. Y puedes hacer interfaces gráficas
muy fácilmente.
Inclusive Perl en casi todas las distribuciones, trae un ejemplo llamado
lwp-rget. Con 144 lineas de código (eliminando textos de forma
de uso) es un programa que descarga (recursivamente) todas las
páginas de un sitio, configurando opciones, el script busca todos los
links de las páginas y baja todos los recursos para ver todas las páginas
del sitio off-line. -- Muy util para bajar imágenes
--
Con pocas modificaciones y eliminando el almacenamiento en disco
que hace ese script, podrías hacer un crawler eficiente. (Supe de
alguien que lo modificó para buscar solo direcciones de e-mails, le
tomó menos de 20 minutos hacerle los cambios y agregarle
almacenamiento en MySQL).
Saludos,