Partilhar via


Windows Sockets: usando classe CAsyncSocket

Este artigo explica como usar a classe CAsyncSocket. Lembre-se de que essa classe encapsula soquetes API do windows em um nível muito baixo. CAsyncSocket é para uso dos programadores que conhecem comunicações de rede em detalhes mas desejar conveniência de retornos de chamada para a notificação de eventos de rede. Com base nessa pressuposição, este artigo fornece apenas a instrução básica. Você provavelmente deve considerar o uso de CAsyncSocket se você deseja a facilidade de soquetes do windows de lidar com vários protocolos de rede em um aplicativo de MFC mas não quiser sacrificar flexibilidade. Você também pode sentir que você pode obter a melhor eficiência programando as comunicações mais diretamente você mesmo do que você pode usar o modelo de backup mais geral da classe CSocket.

CAsyncSocket é documentado na referência de MFC. Visual C++ também fornece a especificação de soquetes do windows, localizada em Windows SDK. Os detalhes são-lhe restantes. Visual C++ não fornece um aplicativo de exemplo para CAsyncSocket.

Se você não for altamente experiência em comunicações de rede e não quiser que uma solução simples, a classe CSocket de uso com um objeto de CArchive . Consulte Soquetes do windows: Usando soquetes com arquivos mortos para obter mais informações.

Este artigo abrange:

  • Criando e usando um objeto de CAsyncSocket .

  • Suas responsabilidades com CAsyncSocket.

Criando e usando um objeto de CAsyncSocket

Para usar CAsyncSocket

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

    A criação de um soquete segue o padrão de MFC de compilaçã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 anterior cria um objeto de CAsyncSocket na pilha. O segundo construtor cria CAsyncSocket no heap. A primeira chamada de Crie anterior usa os parâmetros padrão para criar um soquete de fluxo. O segundo chamada de Criar cria um soquete de datagrama com uma porta e um endereço especificados. (Você pode usar uma versão de Criar com qualquer método de criação.)

    Os parâmetros a Criar são:

    • Uma porta “”: um inteiro curto.

      Para um soquete de servidor, você deve especificar uma porta. Para um soquete de cliente, normalmente você aceita o valor padrão para esse parâmetro, que permite que o windows que os soquetes elas selecionam uma porta.

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

    • Um soquete “endereço, como” ftp.microsoft.com” ou “128.56.22.8”.

      Este é o endereço IP (IP) na rede. Você provavelmente sempre confiará no valor padrão para este parâmetro.

    Os termos “port” e “endereço de soquete” são explicados em Soquetes do windows: Portas e endereço de soquete.

  2. Se o soquete é um cliente, conecte o objeto de soquete a um soquete do servidor, usando CAsyncSocket::Connect.

    - ou -

    Se o soquete é um servidor, defina o soquete para iniciar a escutar (com CAsyncSocket::Listen) para se conectam tentativas de um cliente. Após o recebimento de uma solicitação de conexão, aceitar-la com CAsyncSocket::Accept.

    Após aceito uma conexão, você pode executar tarefas como validando senhas.

    Dica

    A função de membro de Aceitar usa uma referência a um novo objeto vazio, de CSocket como o parâmetro.Você deve construir esse objeto antes de chamar Aceitar.Se esse objeto de soquete sair do escopo, a conexão é fechada.Não chame Criar para esse novo objeto de soquete.Para obter um exemplo, consulte o artigo Soquetes do windows: Sequência de operações.

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

    Consulte os soquetes especificação do windows e a classe CAsyncSocketna referência de MFC.

  4. Destruir o objeto de CAsyncSocket .

    Se você criou o objeto de soquete na pilha, seu destruidor é chamado quando a função contentor sai do escopo. Se você criou o objeto de soquete no heap, usando o operador de new , você é responsável para usar o operador de delete para destruir o objeto.

    O destruidor chama a função de membro de Término do objeto antes de destruir o objeto.

Para obter um exemplo dessa sequência em código (realmente para um objeto de CSocket ), consulte Soquetes do windows: Sequência de operações.

Suas responsabilidades com CAsyncSocket

Quando você cria um objeto da classe CAsyncSocket, o objeto encapsula um identificador de SOCKET do windows e fornece operações naquele identificador. Quando você usa CAsyncSocket, você deve tratar problemas que você poderá enfrentar usando a API diretamente. Por exemplo:

  • “Bloqueando” cenários.

  • Diferenças de ordem de byte entre os computadores enviando e recebendo.

  • Conversão entre Unicode e cadeias de caracteres do conjunto de caracteres multibyte (MBCS).

Para definições desses termos e de informações adicionais, consulte Soquetes do windows: Bloqueio, Soquetes do windows: A ordenação de bytes, Soquetes do windows: Convertendo cadeias de caracteres.

Independentemente desses problemas, a classe CAsycnSocket pode ser a opção direita para você se seu aplicativo exigir qualquer flexibilidade e controla-o pode ser obtido. Caso contrário, você deve considerar o uso da classe CSocket em vez disso. CSocket oculta muito detalhes do: bombeia mensagens do windows durante chamadas de bloqueio e fornece acesso a CArchive, que gerencia 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 em MFC