Как один сетевой сокет разбить на два?
Ситуация такая: Клиент соединен с сервером по протоколу tcp, однако это одно соединение, а мне нужно чтобы во время работы программы клиента количество соединений менялось. Допустим я хочу одновременно в разных потоках отправлять данные на сервер и также одновременно принимать другие данные от сервера, клиентов много, поэтому просто создавать новое соединение в основном сокете не вариант, новое соединение должно иметь те же характеристики что и старо, как на сервере так и на клиенте.
Дано: установленное соединение с серверов(сокет)
Найти: Разбить это одно соединение на множество других
Решение: ???
Ответы (1 шт):
Большинство программ при такой задаче используют реализацию протокола на прикладном уровне.
Самый простой и самый распространенный - это разбить поток на TLV структуры. Расшифровывается как Тип, Длинна, Данные.
Несколько потоков данных режутся на буферы. В сокет записывается тип, длинна буфера и сам буфер. На другой стороне: read(1) - switch case - l=ntoa(read(2)) - read(l) собирются в разные потоки.