Compartilhar via


Soquetes do Windows: sequência de operações

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 socket

CSocket sockSrvr;
// construct a socket

CSocket sockClient;
// create the SOCKET

sockSrvr.Create(nPort);1,2
// create the SOCKET

sockClient.Create( );2
// start listening

sockSrvr.Listen( );
// seek a connection

sockClient.Connect(strAddr, nPort);3,4
// construct a new, empty socket

CSocket sockRecv;

// accept connection

sockSrvr.Accept( sockRecv ); 5
// construct file object

CSocketFile file(&sockRecv);
// construct file object

CSocketFile file(&sockClient);
// construct an archive

CArchive arIn(&file, CArchive::load);

- ou -

CArchive arOut(&file, CArchive::store);

- ou Ambos -
// construct an archive

CArchive 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
  1. Onde nPort é um número de porta. Consulte Os Soquetes do Windows: portas e endereços de soquete para obter detalhes sobre portas.

  2. O servidor sempre deve especificar uma porta para que os clientes possam se conectar. Às Create vezes, 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.

  3. Onde nPort é um número de porta e strAddr é um endereço de computador ou um endereço IP (Protocolo de Internet).

  4. 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 Connect funçã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, Connect pressupõe um nome de computador de um dos outros formulários.

  5. Ao chamar Accept no lado do servidor, você passa uma referência a um novo objeto de soquete. Você deve construir esse objeto primeiro, mas não chamá-lo Create . 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.

  6. 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