Во-первых, важно понимать, что методы boost asio socket на получение и отправку означают, что они заказали базовый сетевой стек для получения или отправки данных.По сетевому стеку это может быть Windows Socket API.
Если вы отправляете данные прямо на тот же компьютер через так называемые петлевые адреса, операционная система (если таковая имеется) может просто «передать» ее прослушивающей, то есть принимающей программе.Это сценарий, в котором вам больше всего повезет навести порядок и всегда выполнить все случаи.
Однако, если вы хотите, чтобы вы обращались к другому компьютеру или операционная система была в настроении, у вас будут другиеПоведение:
Протокол TCP был разработан для того, чтобы вы получали данные в порядке , который вы отправили.Но порции или размер пакета, если они будут отправлены, отличаются даже для одного и того же соединения и являются ключевой особенностью TCP.Ваша операционная система или аппаратный сетевой адаптер могут также выполнить некоторую буферизацию отправки или получения, прежде чем сообщать вам об этом.Однако вещи не будут потеряны.
Итак, вкратце о TCP: вы можете убедиться в полноте данных, ожидая определенной точки в ваших данных async_read_until
как раз для этого случая.Данные от нескольких вызовов отправки могут быть в одном приеме, или многие
UDP был спроектирован так, чтобы иметь низкую задержку в отличие от TCP, но без его упорядочения и гарантий полноты.Поэтому, когда вы отправляете дейтаграмму UDP, т.е. пакет, ОС и сетевой адаптер обычно пытаются отправить ее как можно скорее.Однако на пути к другому компьютеру Интернет может потерять его или задержать один пакет до тех пор, пока тот, который вы отправите после первого, так, чтобы данные, отправленные позже, могли быть получены позже, тогда как вы также можете получить отправленный первым,позже или нет.Но когда вы получаете дейтаграмму, она завершается сама по себе.
Таким образом, вкратце для UDP: данные будут поступать в виде блоков дейтаграмм, но некоторые дейтаграммы могут отсутствовать или могут поступать в другом порядке, чем отправленные.Данные от одной отправки могут быть за один прием, могут не быть или позже