Udostępnij za pośrednictwem


Windows Sockets: Wprowadzenie

W tym artykule wyjaśniono charakter i przeznaczenie gniazd systemu Windows. Artykuł zawiera również następujące elementy:

Specyfikacja windows Sockets definiuje binarny interfejs programowania sieciowego dla systemu Microsoft Windows. Windows Sockets są oparte na implementacji gniazd systemu UNIX w Berkeley Software Distribution (BSD, wersja 4.3) z Uniwersytetu Kalifornijskiego w Berkeley. Specyfikacja zawiera zarówno procedury gniazd typu BSD, jak i rozszerzenia specyficzne dla systemu Windows. Użycie interfejsu Windows Sockets umożliwia aplikacji komunikowanie się z dowolną siecią zgodną z interfejsem API windows Sockets. W systemie Win32 gniazda systemu Windows zapewniają bezpieczeństwo wątków.

Wielu dostawców oprogramowania sieciowego obsługuje Windows Sockets w ramach protokołów sieciowych, w tym Transmission Control Protocol/Internet Protocol (TCP/IP), Xerox Network System (XNS), protokół DECNet firmy Digital Equipment Corporation, Internet Packet Exchange/Sequenced Packet Exchange (IPX/SPX) i innych. Chociaż obecna specyfikacja gniazd systemu Windows definiuje abstrakcję gniazd dla protokołu TCP/IP, każdy protokół sieciowy może być zgodny z gniazdami Systemu Windows, podając własną wersję biblioteki łącza dynamicznego (DLL), która implementuje gniazda systemu Windows. Przykłady aplikacji komercyjnych napisanych za pomocą gniazd systemu Windows obejmują serwery X, emulatory terminali i systemy poczty elektronicznej.

Uwaga / Notatka

Celem gniazd systemu Windows jest abstrakcja podstawowej sieci, dzięki czemu nie trzeba mieć wiedzy na temat tej sieci, aby aplikacja mogła działać w dowolnej sieci obsługującej gniazda. W związku z tym ta dokumentacja nie omawia szczegółów protokołów sieciowych.

Biblioteka klas programu Microsoft Foundation (MFC) obsługuje programowanie za pomocą interfejsu API Windows Sockets, dostarczając dwie klasy. Jedna z tych klas, CSocket, zapewnia wysoki poziom abstrakcji, aby uprościć programowanie komunikacji sieciowej.

Specyfikacja Windows Sockets, Windows Sockets: Open Interface for Network Computing Under Microsoft Windows, teraz w wersji 1.1, została opracowana jako otwarty standard sieciowy przez dużą grupę osób i korporacji w społeczności TCP/IP i jest bezpłatnie dostępna do użytku. Model programowania gniazd obsługuje obecnie jedną "domenę komunikacji" przy użyciu pakietu protokołów internetowych. Specyfikacja jest dostępna w zestawie Windows SDK.

Wskazówka

Ponieważ gniazda korzystają z pakietu protokołów internetowych, są preferowaną trasą dla aplikacji obsługujących komunikację internetową na "autostradzie informacyjnej".

Definicja gniazda

Gniazdo to punkt końcowy komunikacji — obiekt, za pośrednictwem którego aplikacja Windows Sockets wysyła lub odbiera pakiety danych w sieci. Gniazdo ma typ i jest skojarzone z uruchomionym procesem, i może mieć nazwę. Obecnie gniazda zwykle wymieniają dane tylko z innymi gniazdami w tej samej "domenie komunikacji", która używa pakietu protokołów internetowych.

Oba rodzaje gniazd są dwukierunkowe; gniazda te umożliwiają przepływ danych w dwóch kierunkach jednocześnie (pełnodupleksowe).

Dostępne są dwa typy gniazd:

  • Gniazda strumienia

    Gniazda strumieniowe zapewniają przepływ strumienia danych bez granic rekordów: strumień bajtów. Dostarczenie strumieni jest zagwarantowane, a także ich poprawna kolejność i brak duplikatów.

  • Gniazda datagramowe

    Gniazda datagramu obsługują przepływ danych w postaci rekordów, który nie jest gwarantowany w dostarczeniu i może nie być dostarczany w kolejności wysłania ani być unikalnym.

"Sekwencjonowany" oznacza, że pakiety są dostarczane w kolejności wysyłanej. "Bez powtórzeń" oznacza, że otrzymasz określony pakiet tylko raz.

Uwaga / Notatka

W ramach niektórych protokołów sieciowych, takich jak XNS, strumienie mogą być zorientowane na rekordy, jako strumienie rekordów, a nie strumienie bajtów. Jednak w przypadku bardziej typowego protokołu TCP/IP strumienie są strumieniami bajtów. Windows Sockets zapewnia poziom abstrakcji niezależnie od podstawowego protokołu.

Aby uzyskać informacje o tych typach i jakiego rodzaju gniazda do użycia w jakich sytuacjach, zobacz Windows Sockets: Stream Sockets i Windows Sockets: Datagram Sockets.

Typ danych SOCKET

Każdy obiekt gniazda MFC zawiera uchwyt do obiektu Windows Sockets. Typ danych tego uchwytu to SOCKET. Uchwyt GNIAZDA jest porównywalny do uchwytu HWND okna. Klasy gniazd MFC zapewniają operacje na hermetyzowanym uchwycie.

Typ danych SOCKET został szczegółowo opisany w zestawie Windows SDK. Zobacz "Typ danych gniazda i wartości błędów" w obszarze Gniazda systemu Windows.

Zastosowania dla gniazd

Gniazda są bardzo przydatne w co najmniej trzech kontekstach komunikacji:

  • Modele klienta/serwera.

  • Scenariusze komunikacji równorzędnej, takie jak aplikacje do obsługi komunikatów.

  • Wykonywanie zdalnych wywołań procedur (RPC) poprzez interpretowanie komunikatu jako wywołania funkcji przez aplikację odbierającą.

Wskazówka

Najlepszy przypadek użycia gniazd MFC to pisanie obu końców komunikacji, poprzez użycie MFC na obu końcach. Aby uzyskać więcej informacji na ten temat, w tym sposób zarządzania sytuacją, gdy komunikujesz się z aplikacjami innymi niż MFC, zobacz Windows Sockets: Byte Ordering.

Aby uzyskać więcej informacji, zobacz Windows Sockets Specification: ntohs, ntohl, htons, htonl. Zapoznaj się również z następującymi tematami:

Zobacz także

Windows Sockets w MFC