Windows Sockets: Za pomocą gniazd z archiwów
W tym artykule opisano model programowania CSocket.Klasa CSocket dostarcza obsługi gniazda na wyższym poziomie abstrakcji niż klasa CAsyncSocket.CSocketużywa wersji protokołu serializacji MFC do przekazywania danych do i z obiektu gniazda poprzez MFC CArchive obiektu.CSocketudostępnia blokowanie (podczas zarządzania przetwarzania w tle wiadomości systemu Windows) i daje dostęp do CArchive, który zarządza wielu aspektów komunikacji, który musiałby samodzielnie przy użyciu surowego API lub klasy CAsyncSocket.
Porada |
---|
Można użyć klasy CSocket przez siebie, jak wygodniejszy wersji CAsyncSocket, ale najprostszy model programowania jest użycie CSocket z CArchive obiektu. |
Aby uzyskać więcej informacji na temat działania wykonania sockets z archiwami zobacz Windows Sockets: Jak działają Sockets z archiwów.Na przykład kodu, zobacz Windows Sockets: Kolejność operacji i Windows Sockets: Przykład Sockets przy użyciu archiwów.Informacje o niektórych funkcji można uzyskać przez wynikające z własnych klas z klas sockets, zobacz Windows Sockets: Wynikających z klasy Socket.
[!UWAGA]
Podczas pisania program kliencki MFC do komunikacji z serwerami w ustalonych (non-MFC), nie należy wysyłać obiektów C++ w archiwum.Chyba, że serwer jest aplikacja MFC, który zrozumie rodzaje obiektów, które chcesz wysłać, nie będzie mógł odbierać i deserializacji obiekty.Pokrewne materiału na temat komunikowania się z aplikacji innych niż MFC również zobacz artykuł Windows Sockets: Kolejność bajtów.
Model programowania CSocket
Za pomocą CSocket obiekt obejmuje tworzenie i kojarzenie ze sobą kilka obiektów klas MFC.W poniższej procedurze ogólne każdy krok jest podjętych gniazda serwera i klienta gniazdo, z wyjątkiem w kroku 3, w którym każdy typ gniazda wymaga różnych działań.
Porada |
---|
W czasie wykonywania aplikacji serwera zazwyczaj uruchamia pierwszy gotowy i "nasłuchuje", gdy aplikacja klienta ma połączenie.Jeśli serwer nie jest gotowy, kiedy klient próbuje połączyć się, zazwyczaj wymagają aplikacji użytkownika, aby spróbować połączyć się ponownie później. |
Skonfigurowanie komunikacji między gniazda serwera i gniazdo klienta.
Konstruowanie CSocket obiektu.
Obiekt używany do tworzenia podstawowej GNIAZDO obsługi.
Dla CSocket obiektu klienta, zwykle należy używać domyślne parametry do Tworzenie, chyba że konieczne jest gniazdo datagramu.Dla CSocket obiekt serwera, należy określić port w Tworzenie wywołania.
[!UWAGA]
CArchivenie działa z gniazdek datagram.Jeśli chcesz użyć CSocket na gniazdo datagramu, należy użyć klasy, jak w przypadku CAsyncSocket, to znaczy bez archiwum.Ponieważ datagramy są niewiarygodne (nie dotrą do i może zostać powtórzony lub kolejności), nie są one zgodne z serializacji poprzez archiwum.Można oczekiwać na zakończenie niezawodnie i sekwencję operacji serializacji.Jeśli spróbujesz użyć CSocket z CArchive obiektu dla datagramu, podanie MFC nie powiedzie się.
Jeśli gniazdo klienta, call CAsyncSocket::Connect połączyć obiekt gniazda socket 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 Członkowskich funkcja ma odniesienie do nowy, pusty CSocket obiekt jako parametr.Należy tworzyć ten obiekt przed wywołaniem Zaakceptuj.Jeśli ten obiekt gniazda wykracza poza zakres, zamyka połączenie.Nie wywołuj Tworzenie dla tego nowego obiektu gniazda.
Tworzenie CSocketFile obiektów, kojarzenie CSocket obiekt z nim.
Tworzenie CArchive obiektu dla załadunku (odbieranie) lub przechowywania danych (wysyłanie).Archiwum jest skojarzony z CSocketFile obiektu.
Należy pamiętać, że CArchive nie działa z gniazdek datagram.
Użyj CArchive obiektu do przesyłania danych między sockets klienta i serwera.
Należy pamiętać, że dany CArchive obiektu przenosi dane w jednym kierunku: do załadunku (odbieranie) lub przechowywania (wysyłanie).W niektórych przypadkach będzie używać dwóch CArchive obiektów: jeden dla wysyłania danych, z drugiej strony do odbierania potwierdzeń.
Po zaakceptowania połączenia i Konfigurowanie archiwum, można wykonywać zadania, takie jak sprawdzanie poprawności hasła.
Zniszczenie archiwum, pliku gniazd i obiekty socket.
[!UWAGA]
Klasa CArchive dostarcza IsBufferEmpty funkcji składowej specjalnie dla klasy CSocket.Jeśli bufor zawiera wiele danych wiadomości, na przykład trzeba pętli do wszystkich z nich są odczytywane i bufor jest czyszczony.W przeciwnym razie następnym zgłoszeniu jest dane mają być odbierane mogą być przez czas nieokreślony opóźnione.Użyj IsBufferEmpty do zapewnienia, aby pobrać wszystkie dane.
Artykuł Windows Sockets: Kolejność operacji obie strony ten proces z przykładowy kod ilustruje.
Aby uzyskać więcej informacji zobacz: