There are 2 types of network programming, Synchronys and Async. Sync programming is easier but less effecient, Async is harder but much more efficient.
In order to learn both models easily, it is better to start in a language that has good library support for these 2 models, C# and Java are great examples since they contain really cool high level frameworks to work with Sockets and threads.
You can also check out the async programming model offered by CCR ( concurrency and coordination runtime ), which is really useful and make async programming really easy.
Hope this help.