Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Замечание
Библиотека классов Microsoft Foundation (MFC) продолжает поддерживаться. Однако мы больше не добавляем функции или обновляем документацию.
В этой статье описывается функциональность уведомлений в классах сокетов. Эти функции-члены — это функции обратного вызова, которые фреймворк вызывает для уведомления вашего объекта сокета о важных событиях. Функции уведомлений:
OnReceive: уведомляет этот сокет о наличии данных в буфере для получения путем вызова Receive.
OnSend: уведомляет этот сокет о том, что теперь он может отправлять данные путем вызова Send.
OnAccept: уведомляет этот сокет прослушивания о том, что он может принимать ожидающие запросы на подключение путем вызова Accept.
OnConnect: уведомляет этот соединительный сокет о завершении попытки подключения: возможно, успешно, либо с ошибкой.
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.
Дополнительные сведения можно найти здесь