Hola z0rg...
Entiendo lo que dices... yo igual te recomiendo C para este tipo de cosas. Java sencillamente no te va a enseñar mucho, puesto que no vas a poder meterte a bajo nivel (nada de Raw Sockets ni nada). Y no es que tenga nada contra Java, si te metes a mi blog encontraras que soy fanático de ese fantástico lenguaje, pero las cosas son así: C/C++ es el indicado para este tipo de cosas.
Te recomiendo
esta página en donde puedes encontrar unos video tutoriales, en donde se explica muy bien el uso los sockets y raw sockets en C. Está todo en inglés, pero el autor es hindú y habla bastante despacio, así que se le entiende todito. Igual, no necesitas si no mirar los ejemplos, compilarlos y probarlos.
Un saludo.