Это нормально делать. Однако вы теряете ресурсы и производительность, если протокол предоставляет способ выполнять несколько асинхронных запросов из одного соединения.
О направлении кода, все зависит от того, чего вы хотите достичь.
Наиболее простой настройкой было бы создать сокет и подключиться к серверу при инициализации каждого клиентского потока. (И закройте сокет, когда поток выйдет, как вы упомянули.)