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


Сокеты Windows: производные от классов сокетов

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

Вы можете производить собственные классы сокетов из CAsyncSocket или CSocket, чтобы добавить собственные функции. В частности, эти классы предоставляют ряд функций виртуальных членов, которые можно переопределить. К этим функциям относятся OnReceive, OnSend, OnAccept, OnConnect и OnClose. Вы можете переопределить функции в производном классе сокетов, чтобы воспользоваться уведомлениями, предоставляемыми при возникновении сетевых событий. Фреймворк вызывает эти функции обратного вызова уведомления, чтобы уведомить вас о важных событиях сокета, таких как получение данных, которые можно начать читать. Дополнительные сведения о функциях уведомлений см. в разделе Сокеты Windows: Уведомления сокетов.

Кроме того, класс CSocket предоставляет функцию-член OnMessagePending (сложно переопределяемую). MFC вызывает эту функцию, пока сокет обрабатывает сообщения Windows. Вы можете переопределить OnMessagePending, чтобы искать определённые сообщения Windows и отвечать на них.

Версия по умолчанию, OnMessagePending, предоставляемая в классе CSocket, проверяет очередь сообщений на наличие сообщений WM_PAINT во время ожидания завершения блокирующего вызова. Он отправляет сообщения с краской для улучшения качества отображения. Помимо того, чтобы сделать что-то полезное, это иллюстрирует один из способов, как вы сами можете переопределить функцию. В качестве другого примера рекомендуется использовать OnMessagePending для следующей задачи. Предположим, что при ожидании завершения сетевой транзакции отображается немодальное диалоговое окно. Диалоговое окно содержит кнопку "Отмена", которую пользователь может использовать для отмены блокирующих транзакций, которые занимают слишком много времени. Переопределение OnMessagePending может перекачивать сообщения, связанные с этим бессерверным диалоговым окном.

OnMessagePending В переопределении верните TRUE или результат вызова версии OnMessagePending базового класса. Вызовите версию базового класса, если она выполняет работу, которую вы по-прежнему хотите выполнить.

Дополнительные сведения можно найти здесь

См. также

Сокеты Windows в MFC