Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описываются сокеты потоков, один из двух доступных типов сокетов Windows. (Другой тип — сокет диаграммы данных.)
Потоковые сокеты обеспечивают передачу данных без границ записи: поток байтов, который может быть двунаправленным (приложение работает в полном дуплексе: оно может как передавать, так и получать данные через сокет). Потоки могут гарантировать доставку данных в последовательном порядке и без дублирования. ("Последовательность" означает, что пакеты доставляются в порядке отправки. "Неуплицированный" означает, что вы получаете определенный пакет только один раз.) Получение потоковых сообщений гарантируется, и потоки хорошо подходят для обработки больших объемов данных.
Сетевой транспортный слой может разбить или группировать данные на пакеты с разумным размером. Класс CSocket
будет обрабатывать упаковку и распаковку для вас.
Потоки основаны на явных подключениях: сокет A запрашивает подключение к сокету B; сокет B принимает или отклоняет запрос на подключение.
Телефонный звонок служит хорошей аналогией для потока. В обычных обстоятельствах принимающая сторона слышит то, что вы говорите в том порядке, который вы говорите, без дублирования или потери. Сокеты потоков подходят, например, для реализаций, таких как протокол FTP, который упрощает передачу ASCII или двоичных файлов произвольного размера.
Потоковые сокеты предпочтительнее датаграммных сокетов, когда необходимо гарантировать доставку данных и когда размер данных велик. Дополнительные сведения о сокетах потоков см. в спецификации сокетов Windows. Спецификация доступна в пакете SDK для Windows.
Использование потоковых сокетов может быть превосходнее приложений, разработанных для использования дейтаграммных сокетов, для передачи данных всем получающим сокетам в сети, поскольку
Модель трансляции подвержена проблемам сетевого наводнения (или шторма).
Модель клиентского сервера, принятая впоследствии, более эффективна.
Модель потока обеспечивает надежную передачу данных, тогда как модель датаграммы этого не делает.
Последняя модель использует возможность обмена данными между приложениями сокетов Юникода и ANSI, которые класс CArchive предоставляет классу CSocket.
Замечание
При использовании класса
CSocket
необходимо использовать поток. Сбой MFC утверждения происходит, если указать тип сокета как SOCK_DGRAM.