Поделиться через


Сокеты Windows. Сокеты потоков

В этой статье описываются сокеты потоков, один из двух доступных типов сокетов Windows. (Другой тип — сокет диаграммы данных.)

Сокеты потоков предоставляют поток данных без границ записи: поток байтов, который может быть двунаправленным (приложение полно дуплексно: оно может передавать и получать через сокет). Потоки можно полагаться на доставку последовательности и неуплицированных данных. ("Последовательность" означает, что пакеты доставляются в порядке отправки. "Неуплицированный" означает, что вы получаете определенный пакет только один раз.) Получение потоковых сообщений гарантируется, и потоки хорошо подходят для обработки больших объемов данных.

Сетевой транспортный слой может разбить или группировать данные на пакеты с разумным размером. Класс CSocket будет обрабатывать упаковку и распаковку для вас.

Потоки основаны на явных подключениях: сокет A запрашивает подключение к сокету B; сокет B принимает или отклоняет запрос на подключение.

Телефонный звонок обеспечивает хорошую аналогию для потока. В обычных обстоятельствах принимающая сторона слышит то, что вы говорите в том порядке, который вы говорите, без дублирования или потери. Сокеты потоков подходят, например, для реализаций, таких как протокол FTP, который упрощает передачу ASCII или двоичных файлов произвольного размера.

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

Использование сокетов потоков может быть выше приложений, предназначенных для использования сокета диаграммы данных для трансляции во всех получающих сокетах в сети, так как

  • Модель трансляции подвержена проблемам сетевого наводнения (или шторма).

  • Модель клиентского сервера, принятая впоследствии, более эффективна.

  • Модель потока предоставляет надежную передачу данных, в которой модель диаграммы данных не выполняется.

  • Последняя модель использует возможность обмена данными между приложениями сокетов Юникода и ANSI, которые класс CArchive предоставляет классу CSocket.

    Примечание.

    При использовании класса CSocketнеобходимо использовать поток. Утверждение MFC завершается ошибкой, если указать тип сокета как SOCK_DGRAM.

См. также

Сокеты Windows в MFC
Сокеты Windows. Фон