Compartilhar via


Windows Sockets: Seqüência de operações

Este artigo ilustra, lado a lado, a seqüência de operações para um soquete de servidor e um soquete de cliente.Como usam os soquetes CArchive objetos, eles são necessariamente soquetes fluxo.

Seqüência de operações para uma comunicação de soquete de fluxo

Para o ponto de construir um CSocketFile de objeto, a seguinte seqüência é precisa (com algumas diferenças de parâmetro) para ambos CAsyncSocket e CSocket.A partir desse momento, a seqüência é estritamente para CSocket.A tabela a seguir ilustra a seqüê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

Server

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 Windows Sockets: portas e endereços de soquete para obter detalhes sobre as portas.

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

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

4.Endereços de máquina podem tomar vários formulários: "ftp.microsoft.com", "microsoft.com".Endereços IP usam o formulário "pontilhada número" "127.54.67.32".O Conectar função verifica se o endereço é um número pontilhado (embora ele não verifica para garantir que o número é uma máquina válida na rede).Se não, Conectar assume um nome de máquina de um dos outros formulários.

5.Quando você chamar 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 chame criar para ele.Tenha em mente que, se esse objeto de soquete ficar do escopo, fecha a conexão.MFC conecta o novo objeto para um SOCKET identificador.Você pode construir o soquete na pilha, como mostrado, ou na pilha.

6.O arquivamento e o arquivo de soquete são fechadas quando saem do escopo.Destruidor do objeto soquete também chama o Fechar função de membro do objeto soquete quando o objeto sai do escopo ou é excluído.

Notas adicionais sobre a seqüência

É a seqüência de chamadas mostradas na tabela anterior para um soquete de fluxo.Soquetes de datagrama, que são sem conexão, não exigem o CAsyncSocket::Connect, ouvir, e Aceitar chamadas (embora você possa usar opcionalmente Conectar).Em vez disso, se você estiver usando a classe CAsyncSocket, datagrama soquetes usar o CAsyncSocket::SendTo e ReceiveFrom funções de membro.(Se você usar Conectar com um soquete de datagrama, use Enviar e receber.) Porque CArchive não funciona com datagramas, não use CSocket com um arquivo se o soquete é um datagrama.

CSocketFile não oferece suporte a todos os CFileda funcionalidade; CFilemembros, como Seek, que não fazem sentido para uma comunicação de soquete não estão disponíveis.Dessa forma, alguns padrão MFC Serialize funções não são compatíveis com CSocketFile.Isso é particularmente verdade a CEditView classe.Você não deve tentar serializar CEditView dados por meio de um CArchive objeto anexado a um CSocketFile de objeto usando CEditView::SerializeRaw; Use CEditView::Serialize em vez disso (não documentados).O SerializeRaw função espera o objeto de arquivo têm 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 no MFC