Сокеты Windows. Уведомления сокетов
В этой статье описываются функции уведомлений в классах сокета. Эти функции-члены — это функции обратного вызова, которые платформа вызывает для уведомления объекта сокета о важных событиях. Функции уведомлений:
OnReceive: уведомляет этот сокет о наличии данных в буфере для получения путем вызова Receive.
OnSend: уведомляет этот сокет о том, что теперь он может отправлять данные путем вызова Send.
OnAccept: уведомляет этот сокет прослушивания о том, что он может принимать ожидающие запросы на подключение путем вызова Accept.
В Подключение: уведомляет этот сокет о завершении попытки подключения: возможно, успешно или, возможно, в ошибке.
OnClose: уведомляет этот сокет о закрытии сокета, к которому он подключен.
Примечание.
Дополнительная функция уведомления — OnOutOfBandData. Это уведомление сообщает принимающему сокету, что для отправки сокета есть данные вне диапазона. Внеполосные данные — это логически независимый канал, связанный с каждой парой подключенных сокетов потоков. Канал вне диапазона обычно используется для отправки "срочных" данных. MFC поддерживает внеполосные данные. Расширенным пользователям, работающим с классом CAsyncSocket , может потребоваться использовать исходящий канал, но пользователям класса CSocket не рекомендуется использовать его. Проще создать второй сокет для передачи таких данных. Дополнительные сведения о внеполосных данных см. в спецификации сокетов Windows, доступной в пакете SDK для Windows.
Если вы наследуете от класса CAsyncSocket
, необходимо переопределить функции уведомлений для этих сетевых событий, интересующих ваше приложение. Если вы наследуете класс из класса CSocket
, вы можете переопределить интересующие функции уведомлений. Вы также можете использовать CSocket
себя, в этом случае функции уведомлений по умолчанию не делают ничего.
Эти функции переопределяются функциями обратного вызова. CAsyncSocket
и CSocket
преобразуйте сообщения в уведомления, но необходимо реализовать способ реагирования функций уведомлений, если вы хотите их использовать. Функции уведомлений вызываются во время уведомления о событии, интересующемом сокете, например о присутствии данных для чтения.
MFC вызывает функции уведомлений, чтобы настроить поведение сокета во время уведомления. Например, вы можете вызвать Receive
функцию OnReceive
уведомлений, то есть получать уведомления о том, что есть данные для чтения, вы вызываете Receive
его для чтения. Этот подход не нужен, но это допустимый сценарий. В качестве альтернативы можно использовать функцию уведомления для отслеживания хода выполнения, печати сообщений TRACE и т. д.
Вы можете воспользоваться этими уведомлениями, переопределив функции уведомлений в производном классе сокета и предоставив реализацию.
Во время операции, например получения или отправки данных, CSocket
объект становится синхронным. Во время синхронного состояния все уведомления, предназначенные для других сокетов, помещаются в очередь, пока текущий сокет ожидает уведомления, которое он хочет. (Например, во время Receive
вызова сокет хочет, чтобы уведомление было прочитано.) После завершения синхронной операции сокета и асинхронного восстановления другие сокеты могут начать получение очередных уведомлений.
Примечание.
В CSocket
функции OnConnect
уведомления никогда не вызывается. Для подключений вызывается Connect
, который возвращается при завершении подключения (успешно или в ошибке). Обработка уведомлений о подключении — это сведения о реализации MFC.
Дополнительные сведения о каждой функции уведомлений см. в разделе "Функция под классомCAsyncSocket
" в справочнике по MFC. Исходный код и сведения о примерах MFC см. в примерах MFC.
Дополнительные сведения см. в разделе: