Introdução ao Winsock
Esta seção é um guia passo a passo para começar a usar a programação do Windows Sockets. Ele foi projetado para fornecer uma compreensão das funções básicas do Winsock e estruturas de dados, e como eles funcionam juntos.
O aplicativo cliente e servidor que usamos neste tópico para ilustração é um cliente e servidor muito básico. Exemplos de código mais avançados estão incluídos nos exemplos incluídos com o Microsoft Windows Software Development Kit (SDK).
As primeiras etapas são as mesmas para aplicativos cliente e servidor.
Os artigos a seguir descrevem as etapas restantes para criar um aplicativo cliente Winsock.
- Criando um soquete para o cliente
- Conectar a um soquete
- Envio e recebimento de dados no cliente
- Desconectar o cliente
Os artigos a seguir descrevem as etapas restantes para criar um aplicativo de servidor Winsock.
- Criando um soquete para o servidor
- Vinculando um soquete
- Escutando em um soquete
- Aceitar uma ligação
- Recebimento e envio de dados no servidor
- Desconectando o servidor
O código-fonte completo para estes exemplos básicos.
- Executando o exemplo de código de cliente e servidor Winsock
- Código completo do cliente Winsock
- Código completo do servidor Winsock
Aplicativos de exemplo avançados do Winsock
Vários aplicativos de exemplo de cliente e servidor Winsock mais avançados estão disponíveis no GitHub. Eles estão listados aqui em ordem de desempenho superior para inferior e são encontrados nos seguintes diretórios:
IOCP
Essa pasta contém três programas de exemplo que usam portas de conclusão de E/S. Os programas incluem: um servidor Winsock,
iocpserver
, que usa a função WSAAccept; um servidor Winsock,iocpserverex
, que usa a função AcceptEx; e um simples cliente Winsock multithread,iocpclient
, usado para testar qualquer um desses servidores.Os programas de servidor suportam vários clientes que se conectam usando TCP/IP e enviando buffers de dados de tamanho arbitrário que o servidor ecoa de volta para o cliente. Por conveniência, um programa cliente simples,
iocpclient
, foi desenvolvido para conectar e enviar continuamente dados para o servidor para estressá-lo usando vários threads. Os servidores Winsock que usam portas de conclusão de E/S oferecem o mais alto desempenho.sobreposição
Esta pasta contém um programa de servidor de amostra que utiliza sobreposição de E/S. O programa de exemplo utiliza a função AcceptEx e E/S sobreposta para lidar de forma eficaz com vários pedidos de conexão assíncronos de clientes. O servidor usa a função AcceptEx para multiplexar diferentes conexões de cliente em um aplicativo Win32 de thread único. O uso de E/S sobrepostas permite maior escalabilidade.
WSAPoll
Esta pasta contém um programa de exemplo básico que demonstra o uso da função WSAPoll. O cliente e o programa de servidor combinados não são bloqueadores e usam a função WSAPoll para determinar quando é possível enviar ou receber sem bloqueio. Este exemplo é ilustrativo e não é um servidor de alto desempenho.
simples
Esta pasta contém três programas de exemplo básicos que demonstram o uso de vários threads por um servidor. Os programas incluem: um simples servidor TCP/UDP,
simples
; um servidor somente TCP,simples_ioctl
, que usa a função selecionar em um aplicativo de console Win32 para suportar várias solicitações de cliente; e um programa cliente TCP/UDP,simplec
, para testar os servidores. Os servidores demonstram o uso de vários threads para lidar com várias solicitações de clientes. Esse método tem problemas de escalabilidade, uma vez que um thread separado é criado para cada solicitação do cliente.aceitar
Esta pasta contém um servidor de exemplo básico e um programa cliente. O servidor demonstra o uso de aceitação não bloqueante usando a função select ou aceitação assíncrona usando a função WSAAsyncSelect. Este exemplo é ilustrativo e não é um servidor de alto desempenho.