Windows Sockets: gniazda strumieni
W tym artykule opisano gniazda strumienia — jeden z dwóch dostępnych typów gniazd systemu Windows. (Innym typem jest gniazdo datagramu).
Gniazda strumienia zapewniają przepływ danych bez granic rekordów: strumień bajtów, które mogą być dwukierunkowe (aplikacja jest pełnodupleksowa: może przesyłać i odbierać przez gniazdo). Strumienie można polegać na dostarczaniu sekwencjonowanych, niezreplikowanych danych. ("Sekwencjonowane" oznacza, że pakiety są dostarczane w kolejności wysyłanej. "Unduplicated" oznacza, że otrzymasz określony pakiet tylko raz). Odbieranie komunikatów strumienia jest gwarantowane, a strumienie są odpowiednie do obsługi dużych ilości danych.
Warstwa transportu sieciowego może podzielić lub zgrupować dane w pakietach o rozsądnym rozmiarze. Klasa CSocket
będzie obsługiwać pakowanie i rozpakowywanie.
Strumienie są oparte na jawnych połączeniach: gniazdo A żąda połączenia z gniazdem B; gniazdo B akceptuje lub odrzuca żądanie połączenia.
Połączenie telefoniczne zapewnia dobrą analogię do strumienia. W normalnych okolicznościach strona otrzymująca słyszy to, co mówisz w kolejności, w jakiej to mówisz, bez duplikowania lub utraty. Gniazda strumienia są odpowiednie, na przykład w przypadku implementacji, takich jak protokół TRANSFERU plików (FTP), który ułatwia przesyłanie plików ASCII lub binarnych o dowolnym rozmiarze.
Gniazda strumienia są preferowane do gniazd datagramu, gdy dane muszą być gwarantowane do odebrania i gdy rozmiar danych jest duży. Aby uzyskać więcej informacji na temat gniazd strumienia, zobacz specyfikację gniazd systemu Windows. Specyfikacja jest dostępna w zestawie Windows SDK.
Użycie gniazd strumieniowych może być lepsze od aplikacji zaprojektowanych w celu używania gniazda datagramu do emisji do wszystkich gniazd odbierających w sieci, ponieważ
Model emisji podlega problemom z powodzią sieci (lub "burzą").
Model klient-serwer przyjęty następnie jest bardziej wydajny.
Model strumienia dostarcza niezawodny transfer danych, w którym model datagramu nie jest.
Ostatni model korzysta z możliwości komunikowania się między aplikacjami gniazd Unicode i ANSI, które klasy CArchive nadają klasę CSocket.
Uwaga
Jeśli używasz klasy
CSocket
, musisz użyć strumienia. Potwierdzenie MFC kończy się niepowodzeniem, jeśli określisz typ gniazda jako SOCK_DGRAM.
Zobacz też
Gniazda systemu Windows w MFC
Gniazda systemu Windows: podstawy