Как один сетевой сокет разбить на два?

Ситуация такая: Клиент соединен с сервером по протоколу tcp, однако это одно соединение, а мне нужно чтобы во время работы программы клиента количество соединений менялось. Допустим я хочу одновременно в разных потоках отправлять данные на сервер и также одновременно принимать другие данные от сервера, клиентов много, поэтому просто создавать новое соединение в основном сокете не вариант, новое соединение должно иметь те же характеристики что и старо, как на сервере так и на клиенте.

Дано: установленное соединение с серверов(сокет)

Найти: Разбить это одно соединение на множество других

Решение: ???


Ответы (1 шт):

Автор решения: eri

Большинство программ при такой задаче используют реализацию протокола на прикладном уровне.

Самый простой и самый распространенный - это разбить поток на TLV структуры. Расшифровывается как Тип, Длинна, Данные.

Несколько потоков данных режутся на буферы. В сокет записывается тип, длинна буфера и сам буфер. На другой стороне: read(1) - switch case - l=ntoa(read(2)) - read(l) собирются в разные потоки.

→ Ссылка