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


Принятие подключения (сокеты Windows 2)

Когда сокет прослушивает подключение, программа должна обрабатывать запросы на подключение к сокету.

Прием подключения к сокету

  1. Создайте временный объект SOCKET с именем ClientSocket для приема подключений от клиентов.

    
    SOCKET ClientSocket;
    
    
    
  2. Обычно серверное приложение предназначено для прослушивания подключений от нескольких клиентов. Для высокопроизводительных серверов для обработки нескольких клиентских подключений обычно используются несколько потоков.

    Существует несколько различных методов программирования с использованием Winsock, которые можно использовать для прослушивания нескольких клиентских подключений. Одним из способов программирования является создание непрерывного цикла, который проверяет запросы на подключение с помощью функции прослушивания (см . раздел Прослушивание в сокете). При запросе на подключение приложение вызывает функцию accept, AcceptEx или WSAAccept и передает работу другому потоку для обработки запроса. Возможны и другие методы программирования.

    Обратите внимание, что этот базовый пример очень прост и не использует несколько потоков. Пример также просто прослушивает и принимает только одно соединение.

    
    ClientSocket = INVALID_SOCKET;
    
    // Accept a client socket
    ClientSocket = accept(ListenSocket, NULL, NULL);
    if (ClientSocket == INVALID_SOCKET) {
        printf("accept failed: %d\n", WSAGetLastError());
        closesocket(ListenSocket);
        WSACleanup();
        return 1;
    }
    
    
    
  3. После принятия клиентского подключения серверное приложение обычно передает принятый сокет клиента (переменную ClientSocket в приведенном выше примере кода) рабочему потоку или порту завершения ввода-вывода и продолжает принимать дополнительные подключения. В этом базовом примере сервер переходит к следующему шагу.

    Существует ряд других методов программирования, которые можно использовать для прослушивания и приема нескольких подключений. К ним относятся функции select или WSAPoll . Примеры некоторых из этих различных методов программирования показаны в расширенных примерах Winsock, включенных в пакет средств разработки программного обеспечения Microsoft Windows (SDK).

    Примечание

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

     

Следующий шаг. Получение и отправка данных на сервере

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

Серверное приложение Winsock

Прослушивание сокета