Вы можете создать соединение на все время, не закрывая его. Однако хитрость заключается в обнаружении сбоя соединения. например клиент / сервер перезапустился.
Если вы хотите сопоставить запросы с ответами, вы можете использовать идентификатор запроса, но гораздо более простой подход состоит в том, чтобы отправлять только один запрос за раз на сокет, таким образом, ответ, который вы получаете, относится к только что отправленному запросу. Вы можете использовать более одного сокета в потоке, если это требуется.