TCP гарантирует очередь сообщений ?

[Удален]
839

Здравствуйте, возникла такая ситуация.

Есть некое приложение, которое общается по протоколу TCP(запрос - ответ), но иногда, скажем, раз в 5 минут, сервер сам выступает инициализатором и отсылает мне порцию данных(события).

Может быть такая ситуация, что я отправив порцию своих данных(на которые я хочу получить ответ), получу в ответ данные, которые отправил сервер(события), а не должный ответ ?

спасибо!

Оптимизайка
На сайте с 11.03.2012
Offline
396
#1

Конечно может, т.к. TCP гарантирует только порядок и целостность поступления пакета, т.е. на более низком уровне. К примеру, размер передаваемого сообщения 15 килобайт, сеть режет это на 10 пакетов по 1,5 килобайта и они придут в том порядке и соберутся так, чтобы для получателя пришёл именно такой блок данных в 15 килобайт. В случае UDP, к примеру, куски по 1,5 килобайта могут приходить в случайном порядке и даже вообще не дойти.

⭐ BotGuard (https://botguard.net) ⭐ — защита вашего сайта от вредоносных ботов, воровства контента, клонирования, спама и хакерских атак!
P
На сайте с 08.03.2007
Offline
250
#2

Может только в том случае, если сервер писал крайне странный программист, так как в норме такого быть не может. Есть TCP сессия, и данные между сессиями путаться не могут. Вы инициируете одну сессию, сервер другую, и данные путаться между сессиями не могут. Вот если бы это был протокол UDP - тогда возможно что угодно.

Boris A Dolgov
На сайте с 04.07.2007
Offline
215
#3

Если сервер отвечает клиенту и сервер отправляет клиенту периодическую информацию по одному соединению, то может.

Решение -- вместе с пакетом передавать тип сообщения (ответ или информация) и обрабатывать должным образом.

С уважением, Борис Долгов. Администрирование, дешевые лицензии ISPsystem, Parallels, cPanel, DirectAdmin, скины, SSL - ISPlicense.ru (http://www.isplicense.ru/?from=4926)
[Удален]
#4

Да, соединение одно. Но я все понял, спасибо!

zexis
На сайте с 09.08.2005
Offline
388
#5

Вы пишите свой TCP/IP сервер?

Я писал демон для чата на С++.

После установки TCP соединения, есть 2 встречных потока данных.

1) От клиента к серверу

2) От сервера к клиенту.

В TCP нет разделителей между отдельными блоками данных идущих в каждом направлении.

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

Для упрощения делают обычно так.

Клиент отправляет запрос на сервер и ждет ответа на него.

Сервер по своей инициативе обычно может послать лишь пакет FIN – завершение соединения.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий