Windows Sockets: Usando soquetes com arquivos

Este artigo descreve o Modelo de programação CSocket. De classeCSocket fornece suporte de soquete em um nível mais alto de abstração que da classe CAsyncSocket.CSocket usa uma versão do protocolo de serialização MFC para passar dados para e de um objeto de soquete por meio de um MFC CArchive objeto.CSocket Fornece o bloqueio (enquanto gerencia o processamento em segundo plano das mensagens do Windows) e dá acesso a CArchive, que gerencia muitos aspectos de comunicação que teria de fazer por você mesmo usando o brutos API ou classe CAsyncSocket.

Dica:

Você pode usar classe CSocket por si só, sistema autônomo uma versão mais conveniente de CAsyncSocket, mas o modelo de programação mais simples é usar CSocket com um CArchive objeto.

Para obter mais informações sobre como a implementação de soquetes de arquivos funciona, consulte Windows Sockets: Como funcionam os soquetes com arquivos. Por exemplo o código, consulte Windows Sockets: sequência de operações e Windows Sockets: Exemplo de soquetes de segurança usando arquivos. Para obter informações sobre algumas das funcionalidades que você pode obter, derivando suas próprias classes de classes soquetes, consulte Windows Sockets: Derivando de classes de soquete.

Observação:

Se você estiver escrevendo um programa do cliente MFC para se comunicar com estabelecida (não-MFC) servidores, não envie objetos C++ por meio do arquivar.A menos que o servidor seja um aplicativo MFC que entende os tipos de objetos você deseja para enviar, não será capaz de receber e desserializar os objetos.Para o material relacionado em o assunto da comunicação com aplicativos não-MFC, consulte também o artigo Windows Sockets: byte pedidos.

O modelo de programação CSocket

Usando um CSocket objeto envolve a criação e a associação de vários objetos de classe do MFC juntos. No procedimento geral abaixo, cada etapa é obtida por soquete do servidor e o soquete de cliente, exceto para a etapa 3, na qual cada tipo de soquete requer uma ação diferente.

Dica:

Em time de execução, o servidor aplicativo geralmente começa pela primeira vez a estar pronto e "escutando" quando o aplicativo cliente procura uma conexão.Se o servidor não está pronto quando o cliente tenta se conectar, você normalmente exigir no aplicativo do usuário para tentar se conectar novamente mais tarde.

Para configurar a comunicação entre um servidor de soquete e um soquete de cliente

  1. Construir um CSocket objeto.

  2. Use o objeto para criar a base SOQUETE alça.

    Para um CSocket objeto cliente, você deve usar normalmente os parâmetros padrão para Criar, a menos que seja necessário um soquete de datagrama.Para um CSocket objeto de servidor, você deve especificar uma porta no Criar telefonar.

    Observação:

    CArchive não funciona com soquetes datagrama. Se você quiser usar CSocket para um soquete de datagrama, você deve usar a classe sistema autônomo você usaria CAsyncSocket, ou seja, sem um sistema de arquivar. Como datagramas são não-confiáveis (não chegam a garantia e pode ser repetido ou fora de sequência), não são compatível com a serialização através de um arquivar.Esperar a conclusão de forma confiável e na sequência de uma operação de serialização.Se você tentar usar CSocket com um CArchive Falha do objeto para um datagrama, uma declaração de MFC.

  3. Se o soquete é um cliente, telefonar CAsyncSocket::conectar para conectar o objeto de soquete para um servidor de soquete.

    - ou -

    Se um servidor, o soquete telefonar CAsyncSocket::escutar Para iniciar a escuta de tentativas de conectar-se de um cliente. Ao receber uma solicitação de conexão, aceitá-lo chamando CAsyncSocket::Accept.

    Observação:

    O Aceitar função de membro leva uma referência a um novo e vazio CSocket objeto sistema autônomo parâmetro. Você deve construir esse objeto antes de você telefonar Aceitar.Se este objeto de soquete sai do escopo, a conexão será fechada.Não chame Criar para esse novo objeto de soquete.

  4. Criar um CSocketFile objeto, associando a CSocket objeto com ele.

  5. Criar um CArchive objeto para carregamento (recebimento) ou armazenamento de dados (envio).O arquivar está associado com o CSocketFile objeto.

    Tenha em mente que CArchive não funciona com soquetes datagrama.

  6. Use o CArchive objeto passar dados entre os soquetes do cliente e servidor.

    Lembre-se de que um determinado CArchive objeto move os dados em apenas uma direção: apenas para carregamento (recebimento) ou o armazenamento (envio).Alguns casos, você usará dois CArchive objetos: uma para o envio de dados, o Outros para o recebimento de confirmações.

    Após a aceitação de uma conexão e sistema autônomo configurar o arquivar, você pode executar tarefas sistema autônomo a validação de senhas.

  7. Destrua o arquivar, arquivar de soquete e objetos de soquete.

    Observação:

    C lasse CArchive Fornece o IsBufferEmpty função de membro especificamente para uso com a classe CSocket. Por exemplo, se o buffer contém várias mensagens de dados, você precisará fazer um loop até que todos eles são lidos e o buffer será limpo.Caso contrário, sua próxima notificação de que há dados a ser recebida pode ser atrasada indefinidamente.Use IsBufferEmpty para garantir que recuperar todos os dados.

O artigo Windows Sockets: sequência de operações ilustra os dois lados desse processo com código de exemplo.

Para obter mais informações, consulte:

Consulte também

Conceitos

Windows Sockets no MFC

Referência

CSocket::criar