Windows Sockets: sequência de operações

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

sequência de operações para uma comunicação de Socket fluxo

Backup para o ponto de construir um CSocketFile o objeto, a seguinte sequência é 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 configuração até a comunicação entre um cliente e um servidor.

Configurando a comunicação entre um cliente e um servidor

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.Em que nPort é um número da porta. See 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.The Criar telefonar às vezes também especifica um endereço.No lado do cliente, use os parâmetros padrão, que peça ao MFC para usar qualquer porta disponível.

3.Em que nPort é um número da porta e strAddr é um endereço da computador ou um endereço IP (Internet protocolo IP IP).

4.Endereços de computador podem tomar vários formulários: "ftp.microsoft.com", "microsoft.com".Endereços IP, use o "número"formulário"127.54.67.32 pontilhada".The Conectar-se função verifica se o endereço é um número pontilhado (embora ela não verifica para garantir o número a uma computador válida na rede).Caso contrário, Conectar-se assume um nome de computador de um dos outros formulários.

5.Quando você telefonar Aceitar no lado do servidor, você passa uma referência a um novo objeto de soquete.Você deve construir esse objeto pela primeira vez, mas não chamar Criar para ele.Tenha em mente que, se esse objeto de soquete sai do escopo, fecha a conexão.MFC conecta-se o novo objeto a um SOQUETE alça.Você pode construir o soquete na pilha, sistema autônomo mostrado, ou na pilha.

6.O arquivar e o arquivar de soquete são fechadas quando elas estiverem fora do escopo.Destruidor do objeto de soquete também chama o Fecharfunção de membro para o objeto de soquete quando o objeto sai do escopo ou é excluído.

Notas adicionais sobre a sequência

A sequência de chamadas mostradas na tabela anterior é para um soquete de fluxo.Soquetes do datagrama, que são sem conexão, não exigem o CAsyncSocket::Connect, Ouvir, and Aceitar chama (embora você possa usar opcionalmente Conectar-se).Em vez disso, se você estiver usando a classe CAsyncSocket, uso de soquetes de datagrama de CAsyncSocket::SendTo e ReceiveFrom funções de membro. (Se você usar Conectar-se com o soquete de datagrama, que você usar Enviar and Receber.) Porque CArchive não funciona com datagramas, não use CSocket com um arquivar se o soquete é um datagrama.

CSocketFile não oferece suporte a todos sistema autônomo CFileda funcionalidade; CFile membros, sistema autônomo Seek, que não fazem sentido para uma comunicação de soquete não estão disponíveis. Assim, alguns padrão MFC Serialize funções não são compatível com o CSocketFile. Isso é especialmente verdadeiro do CEditView classe. Você não deve tentar serializar CEditView dados por meio de um CArchive objeto anexado a um CSocketFile uso de objeto CEditView::SerializeRaw; use CEditView::Serialize em vez disso, (não documentado).The SerializeRaw função espera o objeto de arquivo para que sistema autônomo funções, sistema autônomo Seek, que CSocketFile não oferece suporte.

Para obter mais informações, consulte:

Consulte também

Conceitos

Windows Sockets no MFC

Referência

Classe CSocket

CAsyncSocket::criar

CAsyncSocket::fechar