Начало работы с Winsock
Этот раздел представляет собой пошаговое руководство по началу работы с программированием сокетов Windows. Он предназначен для понимания основных функций Winsock и структур данных, а также того, как они работают вместе.
Клиентское и серверное приложения, которые мы используем в этом разделе для иллюстрации, являются очень простым клиентом и сервером. Более сложные примеры кода включены в примеры, включенные в пакет sdk для Microsoft Windows.
Первые несколько шагов одинаковы как для клиентских, так и для серверных приложений.
В следующих статьях описаны оставшиеся шаги по созданию клиентского приложения Winsock.
- Создание сокета для клиента
- Подключение к сокету
- Отправка и получение данных на клиенте
- Отключение клиента
В следующих статьях описаны оставшиеся шаги по созданию серверного приложения Winsock.
- Создание сокета для сервера
- Привязка сокета
- Прослушивание сокета
- Принятие подключения
- Получение и отправка данных на сервере
- Отключение сервера
Полный исходный код для этих базовых примеров.
- Запуск примера кода клиента и сервера Winsock
- Завершение кода клиента 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 для поддержки нескольких клиентских запросов; и клиентская программаsimplec
TCP/UDP , , для тестирования серверов. Серверы демонстрируют использование нескольких потоков для обработки нескольких клиентских запросов. Этот метод имеет проблемы с масштабируемостью, так как для каждого запроса клиента создается отдельный поток.accept
Эта папка содержит базовый пример серверной и клиентской программы. Сервер демонстрирует использование неблокирующего принятия с помощью функции select или асинхронного принятия с помощью функции WSAsyncSelect . Этот пример предназначен для иллюстрации и не является высокопроизводительный сервер.