Windows Sockets: używanie gniazd z archiwami
W tym artykule opisano model programowania CSocketFile, CSocket.Klasa CSocketFile, CSocket dostarcza wsparcie na wyższym poziomie abstrakcji niż klasa CAsyncSocket.CSocketużywa wersji protokołu serializacji MFC do przekazywania danych do i z gniazda obiektu poprzez MFC CArchive obiektu.CSocketudostępnia blokowanie (przy jednoczesnym ograniczaniu tło przetwarzanie komunikatów systemu Windows) i daje dostęp do CArchive, która zarządza wielu aspektów komunikacji, które trzeba by zrobić samodzielnie przy użyciu raw API lub klasy CAsyncSocket.
Porada |
---|
Można użyć klasy CSocket przez siebie jako wygodniejsze wersja CAsyncSocket, ale najprostszy model programowania jest użycie CSocket z CArchive obiektu. |
Aby uzyskać więcej informacji na temat działania wykonania gniazda z archiwum, zobacz Windows Sockets: jak działają gniazda z archiwami.Na przykład kod, zobacz Windows Sockets: sekwencja operacji i Windows Sockets: przykład gniazd korzystających z archiwów.Informacje niektóre funkcje można uzyskać przez wynikające z własnych klas z klas sockets, zobacz Windows Sockets: wyprowadzanie z klas gniazd.
[!UWAGA]
Podczas pisania programu MFC klienta do komunikacji z serwerami ustalonych (non-MFC), nie należy wysyłać za pośrednictwem archiwum z obiektami C++.Chyba że serwer aplikacji MFC, który zrozumie rodzaje obiektów, które chcesz wysłać, nie będzie w stanie odbierać i deserializacji obiektów.Do związanych z nimi materiałów na temat komunikowaniu się z aplikacji MFC nie Zobacz również artykuł Windows Sockets: określanie kolejności bajtów.
Model programowania CSocketFile, CSocket
Za pomocą CSocket obiektu polega na tworzeniu i kojarzenie ze sobą kilka obiektów klas MFC.W poniższej procedurze ogólne każdy krok jest pobierana przez zarówno gniazda serwera i gniazdo klienta, z wyjątkiem kroku 3, w której każdy typ gniazda wymaga inną akcję.
Porada |
---|
W czasie wykonywania aplikacja serwera zazwyczaj rozpoczyna się po raz pierwszy być gotowe i "nasłuchuje", gdy aplikacja klienta ma połączenie.Jeżeli serwer nie jest gotowy, gdy klient próbuje nawiązać połączenie, zazwyczaj wymagają aplikacji użytkownika, aby spróbować połączyć się ponownie później. |
Aby skonfigurować komunikację między gniazda serwera i gniazdo klienta
Budowy CSocketFile, CSocket obiektu.
Obiekt używany do tworzenia bazowego GNIAZDO obsługi.
Dla CSocket klienta obiektów, normalnie powinno być używane domyślne parametry Tworzenie, chyba że trzeba gniazdo datagramu.Dla CSocket obiektu serwera, należy określić port w Create zadzwonić.
[!UWAGA]
CArchivenie działa z gniazdami datagram.Jeśli chcesz użyć CSocket dla gniazdo datagramu, należy użyć klasy, jak można użyć CAsyncSocket, to znaczy bez archiwum.Ponieważ datagramy są nierealne (nie dotrą do i może być powtórzony lub poza sekwencją), nie są one zgodne z serializacji poprzez archiwum.Można oczekiwać na zakończenie niezawodnie i w kolejności operacji serializacji.Jeśli użytkownik próbuje użyć CSocket z CArchive obiektu dla datagramu, podanie MFC nie powiedzie się.
Jeśli gniazdo jest klientem, call CAsyncSocket::Connect do łączenia gniazda obiektu do gniazda serwera.
-lub-
Jeśli gniazdo jest serwerem, wywołanie CAsyncSocket::Listen aby rozpocząć nasłuchiwanie prób połączeń z klienta.Po odebraniu żądania połączenia, zaakceptuj ją przez wywołanie CAsyncSocket::Accept.
[!UWAGA]
Zaakceptuj funkcji składowej ma odniesienie do nowy, pusty CSocket obiekt jako parametr.Należy tworzyć ten obiekt przed wywołaniem Zaakceptuj.Jeśli ten obiekt socket wykracza poza zakres, zamyka połączenie.Nie wywołuj Create dla tego nowego obiektu gniazda.
Tworzenie klasy obiektu, kojarzenie CSocket obiekt z nim.
Tworzenie CArchive obiektu dla ładowania (odbieranie) lub przechowywania danych (wysyłanie).Archiwum jest skojarzony z CSocketFile obiektu.
Należy pamiętać, że CArchive nie działa z gniazdami datagram.
Użycie CArchive obiektu do przesyłania danych między gniazdami klienta i serwera.
Należy pamiętać, że dany CArchive obiektu przenosi dane tylko w jednym kierunku: do załadunku (odbieranie) lub przechowywania (wysyłanie).W niektórych przypadkach można używać dwóch CArchive obiektów: jeden do wysyłania danych, drugi dla otrzymania potwierdzenia.
Po zaakceptowania połączenia i Konfigurowanie archiwum, można wykonywać zadania, takie jak sprawdzanie poprawności hasła.
Zniszczenie archiwum, pliku socket i obiekty socket.
[!UWAGA]
Klasa CArchive dostarcza IsBufferEmpty funkcji składowej specjalnie do używania z klasy CSocket.Jeśli bufor zawiera wiele wiadomości danych, na przykład, musisz w pętli do wszystkie z nich są odczytywane i bufor jest czyszczony.W przeciwnym razie Twój następnego powiadomienia, że ma danych, aby można było odbierać może być przez czas nieokreślony opóźniona.Użycie IsBufferEmpty do zapewnienia, aby pobrać wszystkie dane.
Artykuł Windows Sockets: sekwencja operacji ilustruje obu stron tego procesu z przykładowego kodu.
Aby uzyskać więcej informacji, zobacz: