Windows Sockets: powiadomienia dotyczące gniazd
W tym artykule opisano funkcje powiadomień w klasach gniazd. Te funkcje składowe to funkcje wywołania zwrotnego, które platforma wywołuje w celu powiadamiania obiektu gniazda o ważnych zdarzeniach. Funkcje powiadomień to:
OnReceive: powiadamia to gniazdo, że w buforze znajdują się dane, które mają zostać pobrane przez wywołanie funkcji Odbierz.
OnSend: powiadamia to gniazdo, że teraz może wysyłać dane, wywołując polecenie Send.
OnAccept: powiadamia to gniazdo nasłuchiwania, że może zaakceptować oczekujące żądania połączenia, wywołując polecenie Akceptuj.
On Połączenie: Powiadamia to gniazdo łączące, że jego próba połączenia została ukończona: być może pomyślnie lub być może w błędzie.
OnClose: powiadamia to gniazdo, że gniazdo, z którymi jest połączony, zostało zamknięte.
Uwaga
Dodatkową funkcją powiadomienia jest OnOutOfBandData. To powiadomienie informuje gniazdo odbierające, że gniazdo wysyłające ma "poza pasmem" dane do wysłania. Dane poza pasmem są logicznie niezależnym kanałem skojarzonym z każdą parą podłączonych gniazd strumienia. Kanał poza pasmem jest zwykle używany do wysyłania "pilnych" danych. MFC obsługuje dane poza pasmem. Użytkownicy zaawansowani pracujący z klasą CAsyncSocket mogą potrzebować korzystania z kanału poza pasmem, ale użytkownicy klasy CSocket nie są zniechęceni do korzystania z niego. Łatwiejszym sposobem jest utworzenie drugiego gniazda do przekazywania takich danych. Aby uzyskać więcej informacji na temat danych poza pasmem, zobacz specyfikację gniazd systemu Windows dostępną w zestawie Windows SDK.
Jeśli pochodzisz z klasy CAsyncSocket
, należy zastąpić funkcje powiadomień dla tych zdarzeń sieciowych interesujących aplikację. Jeśli utworzysz klasę z klasy CSocket
, możesz przesłonić interesujące cię funkcje powiadomień. Możesz również użyć CSocket
samego siebie, w tym przypadku funkcje powiadomień domyślnie nie robią nic.
Te funkcje są zastępowalnymi funkcjami wywołania zwrotnego. CAsyncSocket
i CSocket
konwertuj komunikaty na powiadomienia, ale musisz zaimplementować sposób reagowania funkcji powiadomień, jeśli chcesz ich używać. Funkcje powiadomień są wywoływane w czasie, gdy gniazdo jest powiadamiane o zdarzeniu zainteresowania, takim jak obecność danych do odczytania.
Usługa MFC wywołuje funkcje powiadomień, aby umożliwić dostosowanie zachowania gniazda w momencie powiadamiania. Możesz na przykład wywołać Receive
funkcję OnReceive
powiadomienia, czyli po powiadomieniu o tym, że istnieją dane do odczytania, wywołujesz metodę Receive
odczytu. Takie podejście nie jest konieczne, ale jest to prawidłowy scenariusz. Alternatywnie możesz użyć funkcji powiadomień, aby śledzić postęp, drukować komunikaty TRACE itd.
Możesz skorzystać z tych powiadomień, przesłaniając funkcje powiadomień w klasie pochodnego gniazda i zapewniając implementację.
Podczas operacji, takiej jak odbieranie lub wysyłanie danych, CSocket
obiekt staje się synchroniczny. Podczas synchronicznego stanu wszystkie powiadomienia przeznaczone dla innych gniazd są kolejkowane, podczas gdy bieżące gniazdo czeka na żądane powiadomienie. (Na przykład podczas wywołania Receive
gniazdo chce odczytać powiadomienie). Gdy gniazdo zakończy operację synchroniczną i ponownie stanie się asynchroniczne, inne gniazda mogą rozpocząć odbieranie powiadomień w kolejce.
Uwaga
W CSocket
systemie funkcja powiadamiania OnConnect
nigdy nie jest wywoływana. W przypadku połączeń wywołasz metodę Connect
, która zostanie zwrócona po zakończeniu połączenia (pomyślnie lub w błędzie). Sposób obsługi powiadomień o połączeniu to szczegóły implementacji MFC.
Aby uzyskać szczegółowe informacje o każdej funkcji powiadomień, zobacz funkcję w klasie CAsyncSocket
w dokumentacji MFC. Aby uzyskać kod źródłowy i informacje o przykładach MFC, zobacz Przykłady MFC.
Aby uzyskać więcej informacji, zobacz: