URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 4020
[ Назад ]

Исходное сообщение
"Выделение отдельных пакетов в tcp потоке"

Отправлено Quarc , 03-Мрт-05 00:09 
Сетевой демон на C. Для соединений использую протокол tcp, проблема в том что он является потоковым. Т.е. у меня нет гарантий, что один пакет посланный клиентом сервер не примет как несколько пакетов, и наоборот - несколько пакетов от клиента сервер может принять при чтении с сокета как один.
Подскажите как с этим бороться. Есть мысль использовать сигнатуры начала и конца пакетов, но уж больно накладно получается, поиск строк в пакетах. Может есть способ лучше?

PS: использовать udp не предлагать - tcp нужен для контроля состояния соединения и контроля доставки пакетов.


Содержание

Сообщения в этом обсуждении
"Выделение отдельных пакетов в tcp потоке"
Отправлено Dead Mustdie , 03-Мрт-05 09:43 
Организовать прикладной протокол обмена так,
чтобы границы пакетов были видны. Дабы не
искать каких-то там сигнатур, можно перед
посылкой каждого пакета отправлять его размер.
Только не забыть размерную цифирь в сетевой
byte order перевести.

"Выделение отдельных пакетов в tcp потоке"
Отправлено MaximKuznetsov , 03-Мрт-05 22:25 
>Сетевой демон на C. Для соединений использую протокол tcp, проблема в том
>что он является потоковым. Т.е. у меня нет гарантий, что один
>пакет посланный клиентом сервер не примет как несколько пакетов, и наоборот
>- несколько пакетов от клиента сервер может принять при чтении с
>сокета как один.
>Подскажите как с этим бороться. Есть мысль использовать сигнатуры начала и конца
>пакетов, но уж больно накладно получается, поиск строк в пакетах. Может
>есть способ лучше?
>
>PS: использовать udp не предлагать - tcp нужен для контроля состояния соединения
>и контроля доставки пакетов.

(про то что поток можно резать уже сказали)

можно попробовать и какой-нить другой протокол..
например SCTP (http://www.sctp.org/ )
или обойтись udp, сделав свой механизм квитирования и переповторов.
Ах да - udp просили не предлагать..зря
;-)