Wprowadzenie do usługi Winsock
Ta sekcja jest przewodnikiem krok po kroku dotyczącym rozpoczynania pracy z programowaniem windows Sockets. Jest ona przeznaczona do zapewnienia zrozumienia podstawowych funkcji i struktur danych Winsock oraz sposobu ich współpracy.
Aplikacja kliencka i serwerowa używana w tym temacie na potrzeby ilustracji jest bardzo podstawowym klientem i serwerem. Bardziej zaawansowane przykłady kodu znajdują się w przykładach dołączonych do zestawu Microsoft Windows Software Development Kit (SDK).
Pierwsze kroki są takie same zarówno w przypadku aplikacji klienckich, jak i serwerowych.
W poniższych artykułach opisano pozostałe kroki tworzenia aplikacji klienckiej Winsock.
- Tworzenie gniazda dla klienta
- Nawiązywanie połączenia z gniazdem
- wysyłanie i odbieranie danych po stronie klienta
- Rozłączanie klienta
W poniższych artykułach opisano pozostałe kroki tworzenia aplikacji serwera Winsock.
- Tworzenie gniazda dla serwera
- wiązanie gniazda
- nasłuchiwanie na gniazda
- Akceptowanie połączenia
- odbieranie i wysyłanie danych na serwerze
- rozłączanie serwera
Kompletny kod źródłowy dla tych podstawowych przykładów.
- uruchamianie przykładowego kodu klienta i serwera Winsock
- ukończ kod klienta Winsock
- ukończ kod serwera Winsock
Zaawansowane przykładowe aplikacje Winsock
Kilka bardziej zaawansowanych przykładowych aplikacji klienta i serwera Winsock jest dostępnych na GitHub. Są one wymienione tutaj w kolejności od wyższej do niższej wydajności i znajdują się w następujących katalogach:
iocp
Ten folder zawiera trzy przykładowe programy korzystające z portów uzupełniania we/wy. Programy obejmują: serwer Winsock,
iocpserver
, który używa funkcji WSAAccept; serwer Winsock,iocpserverex
, który używa funkcji AcceptEx; oraz prosty, wielowątkowy klient Winsock,iocpclient
, używany do testowania jednego z tych serwerów.Programy serwera obsługują wielu klientów łączących się przy użyciu protokołu TCP/IP oraz wysyłających bufory danych o dowolnym rozmiarze, które następnie serwer wysyła z powrotem do klienta. Dla wygody prosty program kliencki,
iocpclient
, został opracowany w celu nawiązania połączenia i ciągłego wysyłania danych do serwera w celu przeciążania go przy użyciu wielu wątków. Serwery Winsock korzystające z portów uzupełniania we/wy zapewniają najwyższą wydajność.nakładać się
Ten folder zawiera przykładowy program serwera, który używa nakładających się operacji we/wy. Przykładowy program używa funkcji AcceptEx i nakładających się operacji we/wy w celu efektywnego obsługi wielu asynchronicznych żądań połączeń od klientów. Serwer używa funkcji AcceptEx do multipleksowania różnych połączeń klienckich w jednowątkowym aplikacji Win32. Użycie nakładających się operacji wejścia/wyjścia umożliwia większą skalowalność.
WSAPoll
Ten folder zawiera podstawowy przykładowy program, który demonstruje użycie funkcji WSAPoll. Połączony program klienta i serwera nie blokuje i użyj funkcji WSAPoll, aby określić, kiedy można wysyłać lub odbierać bez blokowania. Ten przykład jest przeznaczony do ilustracji i nie jest serwerem o wysokiej wydajności.
prosty
Ten folder zawiera trzy podstawowe przykładowe programy, które pokazują użycie wielu wątków przez serwer. Programy obejmują: prosty serwer TCP/UDP,
simples
; serwer tylko tcp,simples_ioctl
, który używa wybrać funkcji w aplikacji konsolowej Win32 do obsługi wielu żądań klientów; program TCP/UDP klienta,simplec
, na potrzeby testowania serwerów. Serwery pokazują użycie wielu wątków do obsługi wielu żądań klientów. Ta metoda ma problemy ze skalowalnością, ponieważ dla każdego żądania klienta jest tworzony oddzielny wątek.akceptować
Ten folder zawiera podstawowy przykładowy serwer i program kliencki. Serwer demonstruje użycie akceptowania bez blokowania przy użyciu funkcji select lub asynchronicznej akceptacji przy użyciu funkcji WSAAsyncSelect. Ten przykład jest przeznaczony do ilustracji i nie jest serwerem o wysokiej wydajności.