Threading could be done nowadays in most of languages. C++ for example, you can include the "pthread" library and read the documentation and start doing your program. Although, it only runs on UNIX based operating systems.
Java, as far as I know, is one of the best, multi-platform programming languages which allows you to do any kind of serialization, threading and many more. It has some specific tools for networking after all.
C: forget it, it is possible of course, but I can comfortably say that people don't really make a conscious choice to program in C. Usually it is because either it is a special very low-level platform for which C is the only choice, or because its an old library that is too large to translate to C++.
C++: well, that would be my choice for sure, and I have just implemented a massively-multi-threaded application with network interfaces in C++. For threads, look at Boost Thread library, it is the defacto standard nowadays, and it is cross-platform. C++ is fast, effective and very flexible, and allows both high-level and low-level programming, but it also has quite a steep learning curve.
Java: well, it's easier to learn and has more built-in capabilities that are cross-platform. But in my opinion, it's not worth suffering the presence of the virtual machine (and all its seductive demons, like garbage collecting) and the pseudo-denial of low-level programming. (but I have a bias opinion on that, as you can probably tell)