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.
Este artigo ilustra, lado a lado, a sequência de operações para um soquete de servidor e um soquete do cliente. Como os soquetes usam CArchive objetos, eles são necessariamente soquetes de fluxo.
Sequência de operações para uma comunicação de soquete de fluxo
Até o ponto de construir um CSocketFile objeto, a sequência a seguir é precisa (com algumas diferenças de parâmetro) para ambos CAsyncSocket e CSocket. Desse ponto em diante, a sequência é estritamente para CSocket. A tabela a seguir ilustra a sequência de operações para configurar a comunicação entre um cliente e um servidor.
Configurando a comunicação entre um servidor e um cliente
| Servidor | Cliente |
|---|---|
// construct a socketCSocket sockSrvr; |
// construct a socketCSocket sockClient; |
// create the SOCKETsockSrvr.Create(nPort);1,2 |
// create the SOCKETsockClient.Create( );2 |
// start listeningsockSrvr.Listen( ); |
|
// seek a connectionsockClient.Connect(strAddr, nPort);3,4 |
|
// construct a new, empty socketCSocket sockRecv;// accept connectionsockSrvr.Accept( sockRecv ); 5 |
|
// construct file objectCSocketFile file(&sockRecv); |
// construct file objectCSocketFile file(&sockClient); |
// construct an archiveCArchive arIn(&file, CArchive::load);- ou - CArchive arOut(&file, CArchive::store);- ou Ambos - |
// construct an archiveCArchive arIn(&file, CArchive::load);- ou - CArchive arOut(&file, CArchive::store);- ou Ambos - |
// use the archive to pass data:arIn >> dwValue;- ou - arOut << dwValue;6 |
// use the archive to pass data:arIn >> dwValue;- ou - arOut << dwValue;6 |
Onde nPort é um número de porta. Consulte Os Soquetes do Windows: portas e endereços de soquete para obter detalhes sobre portas.
O servidor sempre deve especificar uma porta para que os clientes possam se conectar. Às
Createvezes, a chamada também especifica um endereço. No lado do cliente, use os parâmetros padrão, que solicitam ao MFC que use qualquer porta disponível.Onde nPort é um número de porta e strAddr é um endereço de computador ou um endereço IP (Protocolo de Internet).
Os endereços do computador podem usar várias formas: "ftp.microsoft.com", "microsoft.com". Os endereços IP usam o formulário "número pontilhado" "127.54.67.32". A
Connectfunção verifica se o endereço é um número pontilhado (embora não verifique se o número é um computador válido na rede). Caso contrário,Connectpressupõe um nome de computador de um dos outros formulários.Ao chamar
Acceptno lado do servidor, você passa uma referência a um novo objeto de soquete. Você deve construir esse objeto primeiro, mas não chamá-loCreate. Tenha em mente que, se esse objeto de soquete ficar fora do escopo, a conexão será fechada. O MFC conecta o novo objeto a um identificador SOCKET . Você pode construir o soquete na pilha, conforme mostrado ou no heap.O arquivo morto e o arquivo de soquete são fechados quando saem do escopo. O destruidor do objeto socket também chama a função Fechar membro do objeto socket quando o objeto sai do escopo ou é excluído.
Notas adicionais sobre a sequência
A sequência de chamadas mostrada na tabela anterior é para um soquete de fluxo. Os soquetes de datagram, que não têm conexão, não exigem as chamadas CAsyncSocket::Connect, Listen e Accept (embora você possa usar Connectopcionalmente). Em vez disso, se você estiver usando a classeCAsyncSocket, os soquetes de datagrama usarão as funções e ReceiveFrom as CAsyncSocket::SendTo funções de membro. (Se você usar Connect com um soquete de datagram, use Send e Receive.) Como CArchive não funciona com datagrams, não use CSocket com um arquivo morto se o soquete for um datagram.
O CSocketFile não dá suporte a todas as funcionalidadesCFile; CFilemembros como Seek, que não fazem sentido para uma comunicação de soquete, não estão disponíveis. Por isso, algumas funções MFC Serialize padrão não são compatíveis com CSocketFile. Isso é particularmente verdadeiro para a CEditView classe. Você não deve tentar serializar CEditView dados por meio de um CArchive objeto anexado a um CSocketFile objeto usando CEditView::SerializeRaw; use CEditView::Serialize em vez disso (não documentado). A função SerializeRaw espera que o objeto de arquivo tenha funções, como Seek, por exemplo, que CSocketFile não dão suporte.
Para obter mais informações, consulte:
Consulte também
Soquetes do Windows no MFC
Classe CSocket
CAsyncSocket::Create
CAsyncSocket::Close