Udostępnij za pośrednictwem


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