Я сделал именно это (если я вас правильно понимаю). У меня есть сервер, который подключается к некоторым целевым устройствам через сокеты, а затем клиенты подключаются к серверу для связи с различными целевыми системами. Это (вроде) то, что вы хотите? У меня есть несколько клиентов, которые общаются с одним и тем же сокетом через сервер.
На моем сервере хранится список подключенных клиентов и список подключенных целей. Когда клиент запрашивает цель, я добавляю ее в матрицу, которая по сути является словарем соединений, потому что несколько клиентов могут одновременно общаться с одной целью. Затем сервер пересылает сообщения между клиентами и целями полностью асинхронно, и я использую идентификаторы транзакций для отслеживания сообщений. Таким образом, когда цель отвечает на запрос, сервер знает, какому клиенту отправить ответ.
Я не уверен, что это то, что вы хотите, но, возможно, то, что я сделал, в любом случае поможет вам на вашем пути. Если я на правильном пути, могу уточнить дальше.