Compartilhar via


Windows Sockets: Usando Sockets com arquivos

Este artigo descreve o modelo de programação de CSocket.Classe CSocket fornece suporte de soquete em um nível mais alto de abstração de classe CAsyncSocket.CSocketusa 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.CSocketfornece o bloqueio (enquanto gerencia o processamento de plano de fundo das mensagens do Windows) e dá acesso a CArchive, que gerencia vários aspectos da comunicação que você teria que fazer sozinho usando o raw API ou classe CAsyncSocket.

DicaDica

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

Para obter mais informações sobre como funciona a implementação de sockets com arquivos, consulte Windows Sockets: Como funcionam Sockets com arquivos.Por exemplo de código, consulte Windows Sockets: Seqüência de operações e Windows Sockets: Exemplo de Sockets usando arquivos.Para obter informações sobre algumas das funcionalidades podem obter, derivando suas próprias classes de classes soquetes, consulte Windows Sockets: Derivação de Classes de soquete.

ObservaçãoObservação

Se você estiver escrevendo um programa cliente do MFC para se comunicar com servidores estabelecida (não-MFC), não envie objetos C++ através do arquivamento.A menos que o servidor é um aplicativo do MFC que entende os tipos de objetos que você deseja enviar, não será capaz de receber e desserializar objetos.Material relacionado no assunto de se comunicar com aplicativos não-MFC, consulte também o artigo Windows Sockets: Bytes pedidos.

O modelo de programação de CSocket

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

DicaDica

Em tempo de execução, o aplicativo de servidor geralmente inicia primeiro 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, normalmente requerem o aplicativo do usuário para se conectar novamente mais tarde.

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

  1. Construir um CSocket objeto.

  2. Use o objeto para criar a base SOCKET identificador.

    Para um CSocket objeto cliente, você normalmente deve usar os parâmetros padrão para criar, a menos que você precisa de um soquete de datagrama.Para um CSocket o objeto de servidor, você deve especificar uma porta na criar chamar.

    ObservaçãoObservação

    CArchivenão funciona com soquetes datagrama.Se você quiser usar CSocket para um soquete de datagrama, você deve usar a classe como você usaria CAsyncSocket, ou seja, sem um sistema de arquivamento.Porque os datagramas são confiáveis (não garantidas de chegar e pode ser repetido ou fora de seqüência), não são compatíveis com a serialização por meio de um arquivo.Você espera que uma operação de serialização para concluir de forma confiável e em seqüência.Se você tentar usar CSocket com um CArchive de objeto para um datagrama, uma declaração de MFC falha.

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

    -  ou  -

    Se o soquete é um servidor, chame CAsyncSocket::Listen para iniciar a escuta para tentativas de conexão de um cliente.Ao receber uma solicitação de conexão, aceitá-lo chamando CAsyncSocket::Accept.

    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.

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

  5. Criar um CArchive objeto para carregamento (recebimento) ou no armazenamento de dados (envio).O arquivamento está associado a CSocketFile objeto.

    Lembre-se de que CArchive não funciona com soquetes datagrama.

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

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

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

  7. Destrua objetos de soquete, o arquivo de socket e arquivamento.

    ObservaçãoObservação

    Classe CArchive fornece a 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á repetir até que todos eles são lidos e o buffer será limpo.Caso contrário, sua próxima notificação que há dados a ser recebido pode ser atrasada indefinidamente.Use IsBufferEmpty para garantir a recuperar todos os dados.

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

Para obter mais informações, consulte:

Consulte também

Referência

CSocket::Create

Conceitos

Windows Sockets no MFC