Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Soquetes do Windows: usando a classe
Este artigo explica como usar a classe CAsyncSocket. Essa classe encapsula a API do Windows Sockets em um nível muito baixo. CAsyncSocket é para uso por programadores que conhecem as comunicações de rede em detalhes, mas querem a conveniência dos retornos de chamada para notificação de eventos de rede. Com base nessa suposição, este artigo fornece apenas instruções básicas. Você provavelmente deve considerar usar CAsyncSocket se quiser a facilidade do Windows Sockets de lidar com vários protocolos de rede em um aplicativo MFC, mas não quiser sacrificar a flexibilidade. Você também pode sentir que consegue obter melhor eficiência programando diretamente as comunicações, mais do que usando o modelo de classe alternativo mais geral CSocket.
CAsyncSocket está documentado na Referência do MFC. O Visual C++ também fornece a especificação de Soquetes do Windows, localizada no SDK do Windows. Os detalhes são deixados para você. O Visual C++ não fornece um aplicativo de exemplo para CAsyncSocket.
Se você não tiver muito conhecimento sobre comunicações de rede e quiser uma solução simples, use a classe CSocket com um CArchive objeto. Consulte Os Soquetes do Windows: usando soquetes com arquivos para obter mais informações.
Este artigo abrange:
Criando e usando um
CAsyncSocketobjeto.
Como criar e usar um CAsyncSocket
Para usar CAsyncSocket
Construa um
CAsyncSocketobjeto e use o objeto para criar o identificadorSOCKETsubjacente.A 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 objeto
CAsyncSocketna pilha. O segundo construtor cria umCAsyncSocketno heap. A primeiraCreatechamada acima usa os parâmetros padrão para criar um soquete de fluxo. A segundaCreatechamada cria um soquete de datagrama com uma porta e um endereço especificados. (Você pode usar qualquerCreateversão com qualquer um dos métodos de construção.)Os parâmetros para
Createsã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, o que permite que os Soquetes do Windows selecionem uma porta.
Um tipo de soquete:
SOCK_STREAM(o padrão) ouSOCK_DGRAM.Um "endereço" de soquete, como
"ftp.microsoft.com"ou"128.56.22.8".Esse é o endereço IP (Protocolo de Internet) na rede. Você provavelmente sempre dependerá do valor padrão para esse parâmetro.
Os termos "porta" e "endereço de soquete" são explicados em Soquetes do Windows: Portas e Endereços de Soquete.
Se o soquete for um cliente, conecte o objeto socket a um soquete de servidor usando
CAsyncSocket::Connect.- ou -
Se o soquete for 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, aceite-a comCAsyncSocket::Accept.Depois de aceitar uma conexão, você pode realizar tarefas como validar senhas.
Observação
A
Acceptfunção membro usa uma referência a um novo objeto vazioCSocketcomo seu parâmetro. Você deve construir esse objeto antes de chamarAccept. Se esse objeto de soquete ficar fora do escopo, a conexão será fechada. Não chameCreatepara novo objeto de soquete. Para obter um exemplo, consulte o artigo Windows Sockets: Sequence of Operations.Realize comunicações com outros sockets chamando as funções membro do objeto
CAsyncSocketque encapsulam as funções da API de Sockets do Windows.Consulte a especificação e a classe
CAsyncSocketdo Windows Sockets na Referência do MFC.Destrua o
CAsyncSocketobjeto.Se você criou o objeto socket na pilha, seu destruidor será chamado quando a função de contenção sair do escopo. Se você criou o objeto socket no heap, usando o operador
new, será responsável por usar o operadordeletepara destruir o objeto.O destruidor chama a função membro do objeto
Closeantes de destruir o objeto.
Para obter um exemplo dessa sequência no código (na verdade, para um CSocket objeto), consulte Os Soquetes do Windows: Sequência de Operações.
Suas responsabilidades com CAsyncSocket
Quando você cria um objeto de classe CAsyncSocket, o objeto encapsula um handle do Windows SOCKET e fornece operações nesse handle. Ao usar CAsyncSocket, você deve lidar com todos os problemas que poderá enfrentar se estiver usando a API diretamente. Por exemplo:
Cenários de "bloqueio".
Diferenças de ordem de byte entre os computadores de envio e recebimento.
Converter entre cadeias de caracteres Unicode e MBCS (conjunto de caracteres multibyte).
Para obter definições desses termos e informações adicionais, consulte Os Soquetes do Windows: Bloqueio, Soquetes do Windows: Ordenação de Bytes, Soquetes do Windows: Convertendo Cadeias de Caracteres.
Apesar desses problemas, a classe CAsyncSocket pode ser a escolha certa para você se seu aplicativo exigir toda a flexibilidade e controle que você pode obter. Caso contrário, considere usar a classe CSocket em vez disso. CSocket oculta muitos detalhes de você: bombeia mensagens do Windows durante o bloqueio de chamadas e dá acesso a CArchive, o que gerencia diferenças de ordem de byte e conversão de cadeia de caracteres para você.
Para obter mais informações, consulte:
- Soquetes do Windows: Plano de fundo
- Soquetes do Windows: Soquetes de fluxo
- Soquetes do Windows: Soquetes de datagramas