Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este artigo descreve o modelo de programação CSocket. A classe CSocket fornece suporte a soquete em um nível mais alto de abstração do que a classe CAsyncSocket.
CSocket usa uma versão do protocolo de serialização MFC para passar dados de e para um objeto de soquete através de um objeto MFC CArchive .
CSocket fornece bloqueio (enquanto gerencia o processamento em segundo plano de mensagens do Windows) e dá acesso ao CArchive, que gerencia muitos aspetos da comunicação que você teria que fazer sozinho usando a API bruta ou a classe CAsyncSocket.
Sugestão
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 CSocket com um objeto CArchive.
Para obter mais informações sobre como funciona a implementação de soquetes com arquivos, consulte Windows Sockets: How Sockets with Archives Work. Para obter um código de exemplo, consulte Windows Sockets: Sequence of Operations e Windows Sockets: Example of Sockets Using Archives. Para obter informações sobre algumas das funcionalidades que você pode obter derivando suas próprias classes das classes de soquetes, consulte Windows Sockets: Derivando de classes de soquete.
Observação
Se você estiver escrevendo um programa cliente MFC para se comunicar com servidores estabelecidos (não-MFC), não envie objetos C++ através do arquivo. A menos que o servidor seja um aplicativo MFC que compreenda os tipos de objetos que você deseja enviar, ele não poderá receber e desserializar seus objetos. Para obter material relacionado sobre o assunto da comunicação com aplicativos não-MFC, consulte também o artigo Windows Sockets: Byte Ordering.
O modelo de programação CSocket
O uso de um CSocket objeto envolve a criação e associação de vários objetos de classe MFC. No procedimento geral abaixo, cada etapa é executada pelo soquete do servidor e pelo soquete do cliente, exceto a etapa 3, na qual cada tipo de soquete requer uma ação diferente.
Sugestão
Em tempo de execução, o aplicativo de servidor geralmente começa primeiro para estar pronto e "escutando" quando o aplicativo cliente procura uma conexão. Se o servidor não estiver pronto quando o cliente tentar se conectar, você normalmente exigirá que o aplicativo do usuário tente se conectar novamente mais tarde.
Para configurar a comunicação entre um soquete de servidor e um soquete de cliente
Construa um objeto CSocket .
Utilize o objeto para criar o manipulador SOCKET subjacente.
Para um
CSocketobjeto cliente, você normalmente deve usar os parâmetros padrão para Criar, a menos que precise de um soquete de datagrama. Para umCSocketobjeto de servidor, você deve especificar uma porta naCreatechamada.Observação
CArchivenão funciona com soquetes de datagrama. Se você quiser usarCSocketpara um soquete de datagrama, você deve usar a classe como você usariaCAsyncSocket, ou seja, sem um arquivo. Como os datagramas não são confiáveis (não é garantido que cheguem e podem ser repetidos ou fora de sequência), eles não são compatíveis com a serialização através de um arquivo. Você espera que uma operação de serialização seja concluída de forma confiável e em sequência. Se você tentar usarCSocketcom umCArchiveobjeto para um datagrama, uma asserção MFC falhará.Se o soquete for um cliente, chame CAsyncSocket::Connect para conectar o objeto de soquete a um soquete de servidor.
-ou-
Se o soquete for um servidor, chame CAsyncSocket::Listen para começar a ouvir as tentativas de conexão de um cliente. Ao receber uma solicitação de conexão, aceite-a chamando CAsyncSocket::Accept.
Observação
A
Acceptfunção member usa uma referência a um novo objeto vazioCSocketcomo parâmetro. Você deve construir este objeto antes de chamarAccept. Se esse objeto de soquete sair do escopo, a conexão será fechada. Não chameCreateesse novo objeto de soquete.Crie um objeto CSocketFile , associando o
CSocketobjeto a ele.Crie um objeto CArchive para carregar (receber) ou armazenar (enviar) dados. O arquivo está associado ao
CSocketFileobjeto.Tenha em mente que
CArchivenão funciona com soquetes de datagrama.Use o
CArchiveobjeto para passar dados entre os soquetes do cliente e do servidor.Lembre-se de que um determinado
CArchiveobjeto move os dados em uma única direção: para carregamento (recebimento) ou armazenamento (envio). Em alguns casos, você usará doisCArchiveobjetos: um para enviar dados, o outro para receber confirmações.Depois de aceitar uma conexão e configurar o arquivo, você pode executar tarefas como validar senhas.
Destrua o arquivo, o arquivo de soquete e os objetos de soquete.
Observação
Class
CArchivefornece a função membroIsBufferEmptyespecificamente para uso com a classeCSocket. Se o buffer contiver várias mensagens de dados, por exemplo, você precisará fazer um loop até que todas elas sejam lidas e o buffer seja limpo. Caso contrário, sua próxima notificação de que há dados a serem recebidos pode ser adiada indefinidamente. UseIsBufferEmptypara garantir que você recupere todos os dados.
O artigo Windows Sockets: Sequence of Operations ilustra ambos os lados desse processo com código de exemplo.
Para obter mais informações, consulte: