The view presented by the Java programming language for anything networking related is too high level/abstract [which is a good thing from productivity POV].
Writing networking code in C is probably the best way of hacking around with the core networking protocols and to see how the things really work; something which has been on my TODO list for quite some time. :-)
The romantic image of an über-programmer is someone who fires up Emacs, types like a machine gun, and delivers a flawless final product from scratch. A more accurate image would be someone who stares quietly into space for a few minutes and then says “Hmm. I think I’ve seen something like this before.” - John D