Несколько вызовов метода send () и 1 метод приема. Это нормально? - PullRequest
1 голос
/ 23 января 2012

Если на стороне клиента я подключаюсь к серверу и вызываю метод Send() для сокета, многократно отправляющего короткие данные, это нормально, что сервер иногда получает только один «пакет», который содержит все накопленные данные, которые сумма многих способов отправки?

Ответы [ 2 ]

4 голосов
/ 23 января 2012

Да. TCP - это поток, здесь нет понятия отдельного «пакета» - вы должны ожидать, что получите все по одному байту за раз, все слитно или что-то среднее.

Единственными гарантиями является то, что никакие данные не будут потеряны и что они будут доставлены в том же порядке, в котором вы их отправили.

0 голосов
/ 23 января 2012

Да, это совершенно нормально, для потоковых сокетов TCP в любом случае.По умолчанию включен алгоритм Nagle для объединения данных, что уменьшает количество пакетов, которые передаются за небольшое время.Вы должны отключить алгоритм, если хотите, чтобы каждый send() передавал свой собственный пакет.Иногда это требуется в особых обстоятельствах, но обычно поведение по умолчанию является адекватным и желательным для большинства случаев использования сокетов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...