Windows Sockets: Usando a classe CAsyncSocket
Este artigo explica como usar a classe CAsyncSocket.Esteja ciente de que essa classe encapsula a API do Sockets do Windows em um nível muito baixo.CAsyncSocket é para uso por programadores que sabe comunicações de rede detalhadamente, mas deseja a conveniência de retornos de chamada de notificação de eventos de rede. Com base nessa pressuposição, este artigo fornece apenas a instrução básica.Você provavelmente deve considerar o uso de CAsyncSocket Se você desejar facilidade do Windows Sockets de lidar com vários protocolos de rede em um aplicativo MFC mas não deseja sacrifiquem a flexibilidade. Você também pode se sentir que você pode obter melhor eficiência por programação as comunicações mais diretamente a você mesmo que você poderia usando o modelo alternativo mais geral de classe CSocket.
CAsyncSocket está documentada a Referência da MFC.O Visual C++ também fornece a especificação de Windows Sockets, localizada no Windows SDK. Os detalhes são deixados para você.O Visual C++ não fornece um exemplo de aplicativo CAsyncSocket.
Se você não é altamente conhecimentos sobre comunicações de rede e quer uma solução simples, use a classe CSocket with a CArchive objeto. See Windows Sockets: Usando soquetes com arquivos para obter mais informações.
Este artigo aborda:
Criar e usar um CAsyncSocket objeto.
Suas responsabilidades com CAsyncSocket.
Criando e usando um objeto CAsyncSocket
Para usar CAsyncSocket
Construir um CAsyncSocket objeto e use o objeto para criar a base SOQUETE alça.
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 CAsyncSocket objeto na pilha. O segundo construtor cria um CAsyncSocket na pilha. O primeiro Criar telefonar acima usa os parâmetros padrão para criar um soquete de fluxo.O segundo Criar telefonar cria um soquete de datagrama com uma porta especificada e um endereço.(Você pode usar qualquer um dos Criarversão com qualquer um dos métodos de construção.)
Os parâmetros de Criar are:
Uma "porta": um inteiro curto.
Para um soquete de servidor, você deve especificar uma porta.Para um soquete de cliente, normalmente você aceitar o valor padrão para esse parâmetro, que permite que o Windows Sockets selecionar uma porta.
Um tipo de soquete: SOCK_STREAM (o padrão) ou SOCK_DGRAM.
"Endereço" sistema autônomo "ftp.microsoft.com" ou "128.56.22.8" soquete.
Isso é o seu endereço IP (Internet protocolo IP IP) na rede.Você provavelmente sempre depende o valor padrão para esse parâmetro.
Os termos "porta" e "endereço de soquete" são explicadas naWindows Sockets: Portas e endereços de soquete.
Se o soquete é um cliente, conectar o objeto de soquete para um servidor de soquete, usando CAsyncSocket::Connect.
- ou -
Se um servidor, o soquete conjunto o soquete para começar a escutar (com CAsyncSocket::Listen) para tentativas de conectar de um cliente.Ao receber uma solicitação de conexão, aceitá-lo com CAsyncSocket::Accept.
Após aceitar uma conexão, você pode executar tarefas sistema autônomo a validação de senhas.
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.Para obter um exemplo, consulte o artigo Windows Sockets: sequência de operações.
Realize a comunicação com outros soquetes chamando o CAsyncSocket funções de membro do objeto que englobam as funções de API do Windows Sockets.
Consulte o Windows Sockets especificação e classe CAsyncSocket in the Referência da MFC.
Destruir o CAsyncSocket objeto.
Se você criou o objeto de soquete na pilha, o destruidor é chamado quando a função contendo sai do escopo.Se você criou o objeto de soquete no heap, usando o novo operador, você é responsável por usar o Excluir operador para destruir o objeto.
O destruidor chama Fecharfunção de membro antes destruir o objeto.
Para obter um exemplo dessa sequência no código (na verdade, por um CSocket objeto), consulte Windows Sockets: sequência de operações.
Suas responsabilidades com CAsyncSocket
Quando você cria um objeto de classe CAsyncSocket, o objeto encapsula um Windows SOQUETE manipular e fornece operações sobre a alça.Quando você usa CAsyncSocket, você precisa lidar com todos os problemas que podem enfrentar se usando a API diretamente. Por exemplo:
Cenários de "Bloqueio".
Byte de ordem as diferenças entre o envio e recebimento de máquinas.
Convertendo entre Unicode e caractere multibyte Defina seqüências de caractere (MBCS).
Para obter as definições desses termos e informações adicionais, consulte Windows Sockets: Bloqueio deWindows Sockets: byte pedidosWindows Sockets: Convertendo strings.
Apesar desses problemas, de classe CAsycnSocket pode ser a escolha certa para você se seu aplicativo requer a flexibilidade e controle, que você pode obter.Caso contrário, você deve considerar o uso da classe CSocket em vez disso. CSocket oculta muitos detalhes de você: Ele bombeia mensagens do Windows durante o bloqueio de chamadas e oferece que acesso a CArchive, que gerencia as diferenças de ordem de byte e conversão de seqüência de caracteres para você.
Para obter mais informações, consulte: