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.
Windows Sockets: 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 destina-se a programadores que conhecem detalhadamente as comunicações de rede, mas que querem a conveniência dos callbacks 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 é possível obter melhor eficiência programando as comunicações de forma mais direta do que poderia ao usar o modelo da classe alternativa mais geral CSocket.
CAsyncSocket está documentado na Referência MFC. O Visual C++ também fornece a especificação Windows Sockets, localizada no SDK do Windows. Os detalhes são deixados para você. Visual C++ não fornece um aplicativo de exemplo para CAsyncSocket.
Se você não tem um grande conhecimento sobre comunicações de rede e deseja uma solução simples, use a classe CSocket com um CArchive objeto. Consulte Windows Sockets: Usando soquetes com arquivos para obter mais informações.
Este artigo abrange:
Criação e uso de um
CAsyncSocketobjeto.
Criando e usando um CAsyncSocket
Para utilizar CAsyncSocket
Construa um objeto
CAsyncSockete use-o para criar o identificador subjacenteSOCKET.A criação de um soquete segue o padrão MFC de construção em 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 mencionado 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 número inteiro curto.
Para um soquete de servidor, você deve especificar uma porta. Para um soquete de cliente, você normalmente aceita o valor padrão para esse parâmetro, que permite que o Windows Sockets selecione 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".Este é o seu endereço IP (Internet Protocol) na rede. Você provavelmente sempre confiará no valor padrão para esse parâmetro.
Os termos "porta" e "endereço de soquete" são explicados em Windows Sockets: Ports and Socket Addresses.
Se o soquete for um cliente, conecte o objeto de soquete a um soquete de servidor, usando
CAsyncSocket::Connect.-ou-
Se o soquete for um servidor, configure o soquete para começar a escutar (com
CAsyncSocket::Listen) as 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 fazer tarefas como validar senhas.
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 chameCreatepara este novo objeto socket. Para obter um exemplo, consulte o artigo Windows Sockets: Sequence of Operations.Efetue comunicações com outros soquetes chamando os métodos do objeto
CAsyncSocketque encapsulam as funções da API do Windows Sockets.Consulte a especificação e a classe
CAsyncSocketdo Windows Sockets na Referência MFC.Destrua o
CAsyncSocketobjeto.Se criaste o objeto de soquete na pilha, o seu destrutor é chamado quando a função que o contém sai do escopo. Se criou o objeto de soquete no heap, usando o operador
new, é responsável por usar o operadordeletepara destruir o objeto.O destruidor chama a função de membro
Closedo objeto antes de destruí-lo.
Para obter um exemplo dessa sequência no código (na verdade, para um CSocket objeto), consulte Windows Sockets: Sequence of Operations.
As suas responsabilidades com CAsyncSocket
Quando você cria um objeto de classe CAsyncSocket, o objeto encapsula um identificador do Windows SOCKET e fornece operações nesse identificador. Ao usar CAsyncSocket, deverá lidar com todos os problemas que poderá enfrentar ao utilizar a API diretamente. Por exemplo:
Cenários de "bloqueio".
Diferenças de ordem de bytes entre as máquinas de envio e de receção.
Conversão entre cadeias de caracteres Unicode e MBCS (conjunto de caracteres multibyte).
Para obter definições desses termos e informações adicionais, consulte Windows Sockets: Blocking, Windows Sockets: Byte Ordering, Windows Sockets: Converting Strings.
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ê: ele bombeia mensagens do Windows durante o bloqueio de chamadas e lhe dá acesso ao CArchive, que gerencia as diferenças de ordem de bytes e conversão de cadeia de caracteres para você.
Para obter mais informações, consulte:
- Windows Sockets: Introdução
- Windows Sockets: Soquetes de fluxo
- Windows Sockets: Soquetes de datagrama