Сокеты Windows. Уведомления сокетовWindows Sockets: Socket Notifications

В этой статье описываются функции уведомлений в классах сокетов.This article describes the notification functions in the socket classes. Эти функции элементов являются функциями обратного вызова, которые платформа вызывает для уведомления объекта сокета важных событий.These member functions are callback functions that the framework calls to notify your socket object of important events. Функции уведомлений:The notification functions are:

  • OnReceive: Уведомляет этот сокет о том, что в буфере есть данные для извлечения путем вызова Receive.OnReceive: Notifies this socket that there is data in the buffer for it to retrieve by calling Receive.

  • OnSend: Уведомляет этот сокет о том, что теперь он может отправить данные, вызвав метод Send.OnSend: Notifies this socket that it can now send data by calling Send.

  • OnAccept: Уведомляет этот сокет прослушивания о том, что он может принимать ожидающие запросы на подключение, вызывая Accept.OnAccept: Notifies this listening socket that it can accept pending connection requests by calling Accept.

  • OnConnect: Уведомляет этот соединительный сокет о том, что попытка подключения завершена: возможно, успешно или, возможно, произошла ошибка.OnConnect: Notifies this connecting socket that its connection attempt completed: perhaps successfully or perhaps in error.

  • OnClose: Уведомляет этот сокет о том, что сокет, к которому он подключен, закрыт.OnClose: Notifies this socket that the socket it is connected to has closed.

    Примечание

    Дополнительная функция уведомления — онаутофбанддата.An additional notification function is OnOutOfBandData. Это уведомление сообщает принимающему сокету, что отправляющий сокет имеет «нестандартные» данные для отправки.This notification tells the receiving socket that the sending socket has "out-of-band" data to send. Нестандартные данные — это логически независимый канал, связанный с каждой парой подключенных сокетов потоков.Out-of-band data is a logically independent channel associated with each pair of connected stream sockets. Канал внештатного канала обычно используется для отправки "срочных" данных.The out-of-band channel is typically used to send "urgent" data. MFC поддерживает данные вне диапазона.MFC supports out-of-band data. Опытным пользователям, работающим с классом CAsyncSocket , может потребоваться использование нестандартного канала, но пользователям класса CSocket не рекомендуется использовать его.Advanced users working with class CAsyncSocket might need to use the out-of-band channel, but users of class CSocket are discouraged from using it. Проще всего создать второй сокет для передачи таких данных.The easier way is to create a second socket for passing such data. Дополнительные сведения о нестандартных данных см. в разделе Спецификация сокетов Windows, доступная в Windows SDK.For more information about out-of-band data, see the Windows Sockets specification, available in the Windows SDK.

Если вы наследуете от класса CAsyncSocket , необходимо переопределить функции уведомления для этих сетевых событий, представляющих интерес для вашего приложения.If you derive from class CAsyncSocket, you must override the notification functions for those network events of interest to your application. Если класс является производным от класса CSocket , он выбирает, следует ли переопределять интересующие функции уведомления.If you derive a class from class CSocket, it is your choice whether to override the notification functions of interest. Вы также можете использовать CSocket саму себя, в этом случае функция уведомлений по умолчанию не делает ничего.You can also use CSocket itself, in which case the notification functions default to doing nothing.

Эти функции являются переопределяемыми функциями обратного вызова.These functions are overridable callback functions. CAsyncSocket и CSocket преобразуют сообщения в уведомления, но необходимо реализовать, как функция уведомления отвечает, если вы хотите их использовать.CAsyncSocket and CSocket convert messages to notifications, but you must implement how the notification functions respond if you wish to use them. Функции уведомления вызываются во время уведомления сокета о событии, например о наличии данных для чтения.The notification functions are called at the time your socket is notified of an event of interest, such as the presence of data to be read.

MFC вызывает функции уведомления, чтобы настроить поведение сокета на момент получения уведомления.MFC calls the notification functions to let you customize your socket's behavior at the time it is notified. Например, вы можете вызвать Receive из OnReceive функции уведомления, то есть уведомлять о наличии данных для чтения, вызвав Receive ее для чтения.For example, you might call Receive from your OnReceive notification function, that is, on being notified that there is data to read, you call Receive to read it. Этот подход не является обязательным, но является допустимым сценарием.This approach is not necessary, but it is a valid scenario. В качестве альтернативы вы можете использовать функцию уведомления для отслеживания хода выполнения, печати сообщений трассировки и т. д.As an alternative, you might use your notification function to track progress, print TRACE messages, and so on.

Вы можете воспользоваться этими уведомлениями, переопределив функции уведомления в производном классе Socket и предоставив реализацию.You can take advantage of these notifications by overriding the notification functions in a derived socket class and providing an implementation.

Во время операции, такой как получение или отправка данных, объект передается в CSocket синхронный режим.During an operation such as receiving or sending data, a CSocket object becomes synchronous. Во время синхронного состояния любые уведомления, предназначенные для других сокетов, помещаются в очередь, пока текущий сокет ожидает уведомления, которое ему требуется.During the synchronous state, any notifications meant for other sockets are queued while the current socket waits for the notification it wants. (Например, во время Receive вызова сокету требуется уведомление для чтения.) После того как сокет завершает свою синхронную операцию и снова переходит в асинхронный режим, другие сокеты могут начать получать уведомления в очереди.(For example, during a Receive call, the socket wants a notification to read.) Once the socket completes its synchronous operation and becomes asynchronous again, other sockets can begin receiving the queued notifications.

Примечание

В CSocket OnConnect функция уведомления никогда не вызывается.In CSocket, the OnConnect notification function is never called. Для соединений вызывается метод Connect , который возвращает значение после завершения соединения (успешно или по ошибке).For connections, you call Connect, which will return when the connection is completed (either successfully or in error). Обработка уведомлений о соединении — это сведения о реализации MFC.How connection notifications are handled is an MFC implementation detail.

Дополнительные сведения о каждой функции уведомления см. в описании функции в разделе класс CAsyncSocket в справочнике по MFC.For details about each notification function, see the function under class CAsyncSocket in the MFC Reference. Исходный код и сведения о примерах MFC см. в разделе примеры MFC.For source code and information about MFC samples, see MFC Samples.

Дополнительные сведения см. в разделе:For more information, see:

См. также разделSee also

Сокеты Windows в MFCWindows Sockets in MFC