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


Начало работы с Winsock

Этот раздел представляет собой пошаговое руководство по началу работы с программированием сокетов Windows. Он предназначен для понимания основных функций Winsock и структур данных, а также того, как они работают вместе.

Клиентское и серверное приложения, которые мы используем в этом разделе для иллюстрации, являются очень простым клиентом и сервером. Более сложные примеры кода включены в примеры, включенные в пакет sdk для Microsoft Windows.

Первые несколько шагов одинаковы как для клиентских, так и для серверных приложений.

В следующих статьях описаны оставшиеся шаги по созданию клиентского приложения Winsock.

В следующих статьях описаны оставшиеся шаги по созданию серверного приложения Winsock.

Полный исходный код для этих базовых примеров.

Расширенные примеры приложений Winsock

На сайте GitHub доступно несколько более сложных примеров приложений для клиента и сервера Winsock . Они перечислены здесь в порядке от более высокой до более низкой производительности и находятся в следующих каталогах:

  • iocp

    Эта папка содержит три примера программ, использующих порты завершения ввода-вывода. Программы включают: сервер Winsock , iocpserverкоторый использует функцию WSAAccept ; сервер Winsock , iocpserverexкоторый использует функцию AcceptEx ; и простой многопоточный клиент Winsock , iocpclientиспользуемый для тестирования любого из этих серверов.

    Серверные программы поддерживают подключение нескольких клиентов по протоколу TCP/IP и отправку буферов данных произвольного размера, которые сервер затем передает клиенту. Для удобства была разработана простая клиентская программа для iocpclientподключения и непрерывной отправки данных на сервер, чтобы подчеркнуть их с помощью нескольких потоков. Серверы Winsock, использующие порты завершения ввода-вывода, обеспечивают максимальную производительность.

  • Перекрываются

    Эта папка содержит пример серверной программы, которая использует перекрывающиеся ввод-вывод. Пример программы использует функцию AcceptEx и перекрывающиеся операции ввода-вывода для эффективной обработки нескольких асинхронных запросов на подключение от клиентов. Сервер использует функцию AcceptEx для мультиплексирования различных клиентских подключений в однопотоковом приложении Win32. Использование перекрывающихся операций ввода-вывода обеспечивает большую масштабируемость.

  • WSAPoll

    Эта папка содержит базовый пример программы, демонстрирующий использование функции WSAPoll . Объединенная клиентская и серверная программы не блокируются и используют функцию WSAPoll , чтобы определить, когда можно отправлять или получать без блокировки. Этот пример предназначен для иллюстрации и не является высокопроизводительный сервер.

  • простой

    Эта папка содержит три основных примера программ, демонстрирующих использование нескольких потоков сервером. К программам относятся: простой сервер TCP/UDP; simplesсервер только TCP, simples_ioctl, который использует функцию select в консольном приложении Win32 для поддержки нескольких клиентских запросов; и клиентская программа simplecTCP/UDP , , для тестирования серверов. Серверы демонстрируют использование нескольких потоков для обработки нескольких клиентских запросов. Этот метод имеет проблемы с масштабируемостью, так как для каждого запроса клиента создается отдельный поток.

  • accept

    Эта папка содержит базовый пример серверной и клиентской программы. Сервер демонстрирует использование неблокирующего принятия с помощью функции select или асинхронного принятия с помощью функции WSAsyncSelect . Этот пример предназначен для иллюстрации и не является высокопроизводительный сервер.