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.
Efter initieringen måste ett SOCKET- objekt instansieras för användning av servern.
Skapa en socket för servern
Funktionen getaddrinfo används för att fastställa värdena i sockaddr struktur:
- AF_INET används för att ange IPv4-adressfamiljen.
- SOCK_STREAM används för att ange en strömsocket.
- IPPROTO_TCP används för att ange TCP-protokollet .
- AI_PASSIVE-flagga anger att anroparen avser att använda den returnerade socket-adressstrukturen i ett anrop till bind-funktionen. När flaggan AI_PASSIVE har angetts och nodename parametern till funktionen getaddrinfo är en NULL- pekare anges IP-adressdelen i socketadressstrukturen till INADDR_ANY för IPv4-adresser eller IN6ADDR_ANY_INIT för IPv6-adresser.
- 27015 är det portnummer som är associerat med servern som klienten ska ansluta till.
Strukturen addrinfo används av funktionen getaddrinfo.
#define DEFAULT_PORT "27015" struct addrinfo *result = NULL, *ptr = NULL, hints; ZeroMemory(&hints, sizeof (hints)); hints.ai_family = AF_INET; hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = IPPROTO_TCP; hints.ai_flags = AI_PASSIVE; // Resolve the local address and port to be used by the server iResult = getaddrinfo(NULL, DEFAULT_PORT, &hints, &result); if (iResult != 0) { printf("getaddrinfo failed: %d\n", iResult); WSACleanup(); return 1; }Skapa ett SOCKET- objekt med namnet ListenSocket så att servern kan lyssna efter klientanslutningar.
SOCKET ListenSocket = INVALID_SOCKET;Anropa funktionen socket och returnera dess värde till variabeln ListenSocket. För denna serverapplikation använder du den första IP-adressen som returnerades av anropet till getaddrinfo som matchade adressfamiljen, sockettypen och protokollet specificerade i hints-parametern. I det här exemplet begärdes en TCP-strömsocket för IPv4 med en adressfamilj med IPv4, en sockettyp av SOCK_STREAM och ett protokoll med IPPROTO_TCP. Därför begärs en IPv4-adress för ListenSocket.
Om serverprogrammet vill lyssna på IPv6 måste adressfamiljen anges till AF_INET6 i tips parameter. Om en server vill lyssna på både IPv6 och IPv4 måste två lyssningsuttag skapas, en för IPv6 och en för IPv4. Dessa två socketar måste hanteras separat av programmet.
Windows Vista och senare erbjuder möjligheten att skapa en enda IPv6-socket som är i dubbelt stackläge för att lyssna på både IPv6 och IPv4. Mer information om den här funktionen finns i Dual-Stack Sockets.
// Create a SOCKET for the server to listen for client connections ListenSocket = socket(result->ai_family, result->ai_socktype, result->ai_protocol);Kontrollera om det finns fel för att säkerställa att socketen är en giltig socket.
if (ListenSocket == INVALID_SOCKET) { printf("Error at socket(): %ld\n", WSAGetLastError()); freeaddrinfo(result); WSACleanup(); return 1; }
Nästa steg: att binda en socket
Relaterade ämnen