Compartilhar via


Windows Sockets: 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 de cliente. Como os soquetes usam objetos de CArchive , são necessariamente soquetes de fluxo.

Sequência de operações para comunicação de soquete de fluxo

Até o ponto de construir um objeto de CSocketFile , a seguinte sequência é exata (com algumas diferenças de parâmetro) para CAsyncSocket e CSocket. A partir desse ponto, 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.

Comunicação do entre um servidor e 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. nPort onde é um número de porta. Consulte Soquetes do windows: Portas e endereço de soquete para obter detalhes sobre portas.

2. O servidor deve sempre especificar uma porta de forma que os clientes podem se conectar. A chamada de Criar às vezes também especifica um endereço. No lado do cliente, use os parâmetros padrão, que solicitam MFC o para usar qualquer porta disponível.

3. nPort onde é um número de porta e um strAddr são endereço do computador ou um endereço IP (IP).

4. Os endereços de computador podem demorar vários formulários: “ftp.microsoft.com”, “microsoft.com”. Os endereços IP “usam o formato “127.54.67.32” do número pontilhado.” As verificações de função de Conectar para verificar se o endereço é um número pontilhado (embora não verifica para assegurar que o número for um computador válido na rede). Caso contrário, Conectar assume um nome de computador de um dos outros formulários.

5. Quando você chama Aceitar no lado do servidor, você passa uma referência para um novo objeto de soquete. Você deve construir esse objeto primeiro, mas não chama Criar para ele. Lembre-se de que se esse objeto de soquete sair do escopo, a conexão fecha. MFC O conectar o novo objeto para um identificador de SOCKET . Você pode construir o soquete na pilha, como mostrado, ou heap.

6. O arquivo morto e o arquivo de soquete são fechados quando sai do escopo. O destruidor do objeto de soquete também chamará a função de membro de Término para o objeto de soquete quando o objeto ou sai do escopo é excluído.

Observações adicionais sobre a sequência

A sequência de chamadas mostrados na tabela anterior é para um soquete de fluxo. Soquetes de datagrama, que não são conexão, não requerem CAsyncSocket::Connect, Escutar, e chamadas de Aceitar (embora você pode optar por usar Conectar). Em vez disso, se você estiver usando a classe CAsyncSocket, soquetes de datagrama usam as funções de membro de CAsyncSocket::SendTo e de ReceiveFrom . (Se você usar Conectar com um soquete de datagrama, você usa Enviar e Receber.) Como CArchive não funciona com datagramas, não use CSocket com um arquivo morto se o soquete é uma datagrama.

CSocketFile não oferece suporte a toda a funcionalidade de CFile ; os membros de CFile como Seek, que não pertence a nenhum sentido para comunicação de soquete, não estão disponíveis. Devido a isso, alguns usam como padrão funções de MFC Serialize não são compatíveis com CSocketFile. Isso é especialmente verdadeiro para a classe de CEditView . Você não deve tentar serializar dados de CEditView por meio de um objeto de CArchive anexado a um objeto de CSocketFile usando CEditView::SerializeRaw; use CEditView::Serialize vez (não documentado). A função de SerializeRaw espera o objeto de arquivo ter funções, como Seek, que CSocketFile não oferece suporte.

Para obter mais informações, consulte:

Consulte também

Referência

Classe CSocket

CAsyncSocket::Create

CAsyncSocket::Close

Conceitos

Windows Sockets em MFC