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


Начало работы с 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, который использует выбрать функцию в консольном приложении Win32 для поддержки нескольких клиентских запросов; и клиентская программа TCP/UDP, simplecдля тестирования серверов. Серверы демонстрируют использование нескольких потоков для обработки нескольких клиентских запросов. Этот метод имеет проблемы с масштабируемостью, так как для каждого запроса клиента создается отдельный поток.

  • принимать

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