Здравствуйте, CrystaX, Вы писали:
CX>Здравствуйте, -Cheese-, Вы писали:
C>>Вот назрел такой вопрос пишу сервер, кот. слушает по определённому порту клиента.
C>>Работа в режиме запрос-ответ.
C>>Иногда возникают ситуации, когда приходит запрос и готовится на него ответ, за это время клиент может ещё слать мне запросы.... Так вот после ответа приходят ко мне запросы, а вернее сказать запрос который есть склееные запросы к серверу за время пока отвечал сервер... а это не есть хорошо
Это вообще фундаментальная особенность TCP-трафика: пакеты, которые на отправляющей стороне отсылаются отдельно, поступать могут на принимающую сторону либо склеенными, либо наоборот -- разделенными на более мелкие части.
C>>Можно ли как-то это пофиксить? Чтоб они приходили в порядке очереди?
CX>TCP? Тогда маркер в конце каждого сообщения или размер сообщения в самом начале.
+1
Именно. Причем нужно будет позаботиться о буфере куда данные из канала поступают и там парсятся. Те данные, которые успешно распарсены из буфера изымаются. Остальны остаются ждать продолжения.
Если сообщения имеют регулярную текстовую структуру (например, XML), то можно обойтись без меток или размера -- сама структура сообщения позволит выделить сообщение целиком. Но это может быть не эффективно на больших сообщениях.
Лично я использую размер сообщения в его залоговке.
CX>Если UDP, то проблемы нет — приходящие дейтаграммы не склеиваются в одну. Правда, есть риск их потери.
C>>P.s.: многопоточность не подходит.
C>>P.s.1: MS VC++ ; MFC; в основе — берклиевский классический сервер.... << RSDN@Home 1.1.4 beta 6a rev. 436>>