![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
pwp2008 |
![]() ![]()
Сообщение
#1
|
Студент ![]() Группа: Участник Сообщений: 29 Регистрация: 19.12.2014 Пользователь №: 4299 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Подскажите пож-та, встречалось ли Вам отправленные друг за другом сообщения (клиентом) получать в сервере "склееном" виде, как если бы это было одно сообщение. В чем причина такой работы по протоколу TCP\IP ? Разрулить эту проблему удалось несколько искусственным способом, хотя здесь может подойти и передача длины сообщения и/или контрольный суммы. Видимо так склеены могут быть не 2, а даже больше последовательных сообщений.
|
|
|
![]() |
ViGOur |
![]()
Сообщение
#2
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
4 байта было сказано для примера, ты сам решай, какой длины будет у тебя поле длина пакета. К тому же жестко указывать размер нельзя, а только sizeof(int), так как под разными системами int разного размера.
4 байта могут так же прийти по частям, это маловероятно, но может быть, например при медленном соединении или при крайней загруженности системы или сети. Блоки не переставляются и контрольные суммы по идее не нужны, так как TCP протокол гарантирует доставку пакета Набросал на коленке пример реализации: Тебе только осталось дописать докачку...Как вариант, во избежании склеивания, можно сделать клиент серверный диалог с подтверждением, например: 1. Клиент отправляет пакет 2. Сервер получает пакет 3. Сервер отправляет подтверждение о получении пакета 4. Клиент получает подтверждени и идет к 1 пункту |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 8.4.2025, 3:59 |