Начало работы с 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 . Этот пример предназначен для иллюстрации и не является высокопроизводительным сервером.