This is a very complicated topic actually :)
The simple answer is that you have only 1 main game thread that actually runs the game. Each player opens a connection to the server. The server can handle each connection in a thread or more commonly will use non-blocking sockets with a single network thread.
In C# I have used the async socket methods which use IOCP behind the scenes - this means you roughly have 1 thread managing the actual sockets and then a thread pool actually delegating to handle the data once its in memory.
If this isn't making much sense to you I recommend doing some reading on game design and networking. I would recommend using something like lidgren if you don't want to write your own networking code.