Windows Sockets: Usando classe CAsyncSocket

Este artigo explica como usar a classe CAsyncSocket.Lembre-se de que essa classe encapsula a API do Windows Sockets em um nível muito baixo.CAsyncSocketé para uso por programadores que saber as comunicações de rede detalhadamente, mas deseja a conveniência de retornos de chamada para notificação de eventos de rede.Com base nesta suposição, este artigo fornece apenas instrução básica.Você provavelmente deve considerar o uso CAsyncSocket se deseja facilidade de Windows Sockets de lidar com vários protocolos de rede em um aplicativo MFC mas não quer sacrificar flexibilidade.Você também pode achar que você pode obter melhor eficiência por programação comunicações mais diretamente mesmo que você poderia usando o modelo alternativo mais geral da classe CSocket.

CAsyncSocketestá documentada a Referência MFC.Visual C++ também fornece a especificação de Windows Sockets, localizada na Windows SDK.Os detalhes são deixados para você.Visual C++ não fornece um exemplo de aplicativo CAsyncSocket.

Se não são altamente capacitados sobre comunicações de rede e deseja uma solução simples, use a classe CSocket com um CArchive objeto.Consulte Windows Sockets: usando Sockets com arquivos para obter mais informações.

Este artigo aborda:

  • Criando e usando um CAsyncSocket objeto.

  • Suas responsabilidades com CAsyncSocket.

Criando e usando um objeto CAsyncSocket

Para usar CAsyncSocket

  1. Construir um CAsyncSocket de objeto e use o objeto para criar a base SOCKET identificador.

    Criação de um soquete segue o padrão MFC de construção de dois estágios.

    Por exemplo:

    CAsyncSocket sock;
    sock.Create( );    // Use the default parameters                    
    

    -  ou  -

    CAsyncSocket* pSocket = new CAsyncSocket;
    int nPort = 27;
    pSocket->Create( nPort, SOCK_DGRAM );                    
    

    O primeiro construtor acima cria um CAsyncSocket o objeto na pilha.O segundo construtor cria um CAsyncSocket no heap.O primeiro criar chamada acima usa os parâmetros padrão para criar um soquete de fluxo.A segunda criar chamada cria um soquete de datagrama com uma porta especificada e o endereço.(Você pode usar um criar versão com o método de construção.)

    Os parâmetros criar são:

    • Uma "porta": um inteiro curto.

      Para um soquete de servidor, você deve especificar uma porta.Para um soquete de cliente, normalmente, aceite o valor padrão para este parâmetro, que permite que o Windows Sockets selecionar uma porta.

    • Um tipo de soquete: SOCK_STREAM (padrão) ou SOCK_DGRAM.

    • Soquete "endereço", como "ftp.microsoft.com" ou "128.56.22.8".

      Este é o seu endereço IP (Internet Protocol) na rede.Você provavelmente sempre irá contar com o valor padrão para este parâmetro.

    Os termos "porta" e "endereço de soquete" é explicado na Windows Sockets: portas e endereços de soquete.

  2. Se o soquete é um cliente, conectar o objeto de soquete para um servidor de soquete, usando CAsyncSocket::Connect.

    -  ou  -

    Se o soquete é um servidor, defina o soquete para começar a escutar (com CAsyncSocket::Listen) para tentativas de conexão de um cliente.Ao receber uma solicitação de conexão, aceitá-lo com CAsyncSocket::Accept.

    Após aceitar uma conexão, você pode executar tarefas como validação de senhas.

    ObservaçãoObservação

    O Aceitar função de membro leva uma referência a um novo, vazio CSocket o objeto como seu parâmetro.Você deve construir esse objeto antes de chamar Aceitar.Se este objeto de soquete ficar fora do escopo, fecha a conexão.Não chame criar para esse novo objeto de soquete.Por exemplo, consulte o artigo Windows Sockets: seqüência de operações de.

  3. Realize comunicações com outros soquetes chamando o CAsyncSocket funções de membro do objeto que encapsulam as funções de API do Windows Sockets.

    Consulte a especificação de Windows Sockets e classe CAsyncSocket na Referência MFC.

  4. Destruir o CAsyncSocket objeto.

    Se você criou o objeto de soquete na pilha, do destruidor é chamado quando a função contendo fica fora do escopo.Se você criou o objeto de soquete na pilha, usando o nova operador, você é responsável por usar o Excluir operador para destruir o objeto.

    O destruidor chama o objeto Fechar função de membro antes destruir o objeto.

Para obter um exemplo dessa seqüência no código (na verdade, para um CSocket objeto), consulte Windows Sockets: seqüência de operações de.

Suas responsabilidades com CAsyncSocket

Quando você cria um objeto da classe CAsyncSocket, o objeto encapsula um Windows SOCKET tratar e fornece operações desse identificador.Quando você usa CAsyncSocket, você deve lidar com todos os problemas que você poderá enfrentar se usando a API diretamente.Por exemplo:

  • Cenários de "Bloqueio".

  • Diferenças de ordem de byte entre o envio e recebimento de máquinas.

  • Convertendo entre Unicode e de caracteres multibyte Defina seqüências de caracteres (MBCS).

Para obter definições desses termos e informações adicionais, consulte Windows Sockets: bloqueando, Windows Sockets: Byte ordenação, Windows Sockets: convertendo Strings.

Apesar desses problemas, classe CAsycnSocket pode ser a escolha certa para você, se seu aplicativo requer a flexibilidade e controle que você pode obter.Se não, você deve considerar usando a classe CSocket em vez disso.CSocketoculta muitos detalhes de você: ele bombeia mensagens do Windows durante o bloqueio de chamadas e oferece acesso a CArchive, que gerencia as diferenças de ordem de byte e conversão de cadeia de caracteres para você.

Para obter mais informações, consulte:

Consulte também

Conceitos

Windows Sockets no MFC