Соединение с одним сокетом с несколькими логическими потоками данных (дифференцирующие пакеты) - PullRequest
0 голосов
/ 28 марта 2012

Я делаю программу на C ++ с использованием Windows-сокетов, где мне нужен один сокет, но я могу отправлять данные из разных потоков и различать на стороне сервера, какой поток отправлял данные, поскольку у них разные приложения. По сути, логические потоки данных с использованием одного сокета соединения. У меня возникли проблемы с поиском способа дифференцировать стороны сервера пакетов. Лучшее, что я могу придумать, - это начинать каждый пакет с нескольких байтов, указывающих, какой поток его отправил. Есть ли лучшие способы сделать это?

Аналогично Как использовать один порт для нескольких логических потоков данных (Winsock)? но я застрял в различении пакетов.

Ответы [ 2 ]

0 голосов
/ 20 марта 2014

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

0 голосов
/ 28 марта 2012

Ваша лучшая ставка (я думаю) состоит в том, чтобы связать уникальный идентификатор с каждой задачей, создать единый поток, который обрабатывает сетевое взаимодействие и (как вы сказали) добавляет идентификатор задачи в пакет.

На стороне получателя вы делаете то же самое: один поток читает пакеты и распределяет их содержимое согласно идентификатору задачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...