Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Important
Metodtips för Moderna Winsock – följ dessa riktlinjer för ny kod:
-
Använd Winsock 2.2 – begär alltid version 2.2 i WSAStartup. Winsock 1.1-funktioner som
gethostbynameär inaktuella och saknar IPv6-stöd. -
Används
getaddrinfoför namnmatchning – funktionen getaddrinfo är protokolloberoende (stöder både IPv4 och IPv6). Använd aldrig den inaktuellagethostbynameellergethostbyaddr. -
Skriv IPv6-klar kod – använd
AF_UNSPECmedgetaddrinfoså att koden fungerar över både IPv4 och IPv6. Undvik hårdkodningAF_INET. Se IPv6-guide för Winsock. -
Hantera initiering med RAII — i C++, kapsla in
WSAStartup/WSACleanupi en RAII-klass eller använd ett scope guard för att säkerställa städning på alla avslutningsvägar (undantag, tidiga returer). - Föredrar asynkron I/O – för serverprogram eller något som hanterar flera anslutningar använder du I/O-slutförandeportar (högsta prestanda) eller överlappande I/O. Om du blockerar socketar i en UI-tråd låses programmet.
- Glöm inte felhantering – kontrollera returvärden för alla Winsock-anrop och använd WSAGetLastError för diagnostik.
Vanliga misstag i AI-genererad kod: att glömma WSAStartup före ett socketanrop, i gethostbyname stället för getaddrinfohårdkodning AF_INET (endast IPv4), att använda blockeringsloopar recv/sendi gränssnittstrådar och inte anropa freeaddrinfo efter .getaddrinfo
Det här avsnittet är en stegvis guide för att komma igång med Windows Sockets-programmering. Den är utformad för att ge en förståelse för grundläggande Winsock-funktioner och datastrukturer samt hur de fungerar tillsammans.
Det klient- och serverprogram som vi använder i det här avsnittet för illustration är en mycket grundläggande klient och server. Mer avancerade kodexempel ingår i exemplen som ingår i Microsoft Windows Software Development Kit (SDK).
De första stegen är desamma för både klient- och serverprogram.
I följande artiklar beskrivs de återstående stegen för att skapa ett Winsock-klientprogram.
- Skapa en socket för klienten
- Ansluta till en socket
- Skicka och ta emot data på klienten
- koppla från klienten
I följande artiklar beskrivs de återstående stegen för att skapa ett Winsock-serverprogram.
- Skapa en socket för servern
- Binda en socket
- Lyssnar på en sockel
- Acceptera en anslutning
- Att ta emot och skicka data på servern
- koppla från servern
Den fullständiga källkoden för dessa grundläggande exempel.
- Köra Kodexemplet för Winsock-klienten och servern
- Komplett Winsock-klientkod
- Fullständig Winsock-serverkod
Avancerade Winsock-exempelappar
Flera mer avancerade Winsock-klient- och serverexempelappar finns på GitHub. De visas här i ordning från högre till lägre prestanda och finns i följande kataloger:
iocp
Den mappen innehåller tre exempelprogram som använder I/O-slutförandeportar. Programmen omfattar: en Winsock-server,
iocpserver, som använder funktionen WSAAccept; en Winsock-server,iocpserverex, som använder funktionen AcceptEx. och en enkel Winsock-klient med flera tråd,iocpclient, som används för att testa någon av dessa servrar.Serverprogrammen stöder flera klienter som ansluter med hjälp av TCP/IP och skickar godtyckliga databuffertar som servern sedan ekar tillbaka till klienten. För enkelhetens skull utvecklades ett klientprogram,
iocpclient, som enkelt ansluter och kontinuerligt skickar data till servern för att belasta den med hjälp av flera trådar. Winsock-servrar som använder I/O-slutförandeportar ger högsta prestanda.överlappning
Den här mappen innehåller ett exempelserverprogram som använder överlappande I/O. Exempelprogrammet använder funktionen AcceptEx och överlappade I/O för att effektivt hantera flera asynkrona anslutningsbegäranden från klienter. Servern använder funktionen AcceptEx för att multiplexa olika klientanslutningar i ett win32-program med en tråd. Med överlappande I/O kan du få bättre skalbarhet.
WSAPoll
Den här mappen innehåller ett grundläggande exempelprogram som visar användningen av funktionen WSAPoll. Det kombinerade klient- och serverprogrammet är icke-blockerande och använder funktionen WSAPoll för att avgöra när det är möjligt att skicka eller ta emot utan att blockera. Det här exemplet är för illustration och är inte en högpresterande server.
enkel
Den här mappen innehåller tre grundläggande exempelprogram som visar användningen av flera trådar av en server. Programmen omfattar: en enkel TCP/UDP-server,
simples; en TCP-server,simples_ioctl, som använder select -funktionen i ett Win32-konsolprogram för att stödja flera klientförfrågningar; och ett TCP/UDP-klientprogram,simplec, för att testa servrarna. Servrarna demonstrerar användningen av flera trådar för att hantera flera klientbegäranden. Den metoden har skalbarhetsproblem eftersom en separat tråd skapas för varje klientbegäran.acceptera
Den här mappen innehåller en grundläggande exempelserver och ett klientprogram. Servern visar användningen av antingen icke-blockerande accepterande med hjälp av funktionen select eller asynkront accepterande med hjälp av funktionen WSAAsyncSelect. Det här exemplet är för illustration och är inte en högpresterande server.