You are making a big mistake: a thread per client. Threads are expensive resources, and the number of clients is not predictable. You should not create threads in the middle of run-time. It's much better to create fixed number of threads in a very beginning and re-use them. For a TCP service, you can add just two network threads, but no less: one for accepting new connections, one more the work with all current clients.
For further detail, please read my past solution where I present a skeleton description of such design:
Multple clients from same port Number[
^].
—SA