Partilhar via


Windows Sockets: Soquetes de fluxo

Este artigo descreve soquetes de fluxo, um dos dois tipos de Windows Socket disponíveis. (O outro tipo é o soquete de datagrama.)

Os soquetes de fluxo fornecem um fluxo de dados sem limites de registro: um fluxo de bytes que pode ser bidirecional (o aplicativo é full duplex: ele pode transmitir e receber através do soquete). Os fluxos podem ser confiáveis para fornecer dados sequenciados e não duplicados. ("Sequenciado" significa que os pacotes são entregues na ordem enviada. "Não duplicado" significa que você recebe um pacote específico apenas uma vez.) O recebimento de mensagens de fluxo é garantido, e os fluxos são adequados para lidar com grandes quantidades de dados.

A camada de transporte de rede pode dividir ou agrupar dados em pacotes de tamanho razoável. A CSocket classe tratará da embalagem e desembalagem para você.

Os fluxos são baseados em conexões explícitas: o soquete A solicita uma conexão com o soquete B; o soquete B aceita ou rejeita a solicitação de conexão.

Uma chamada telefónica fornece uma boa analogia para um fluxo. Em circunstâncias normais, a parte recetora ouve o que você diz na ordem em que você diz, sem duplicação ou perda. Soquetes de fluxo são apropriados, por exemplo, para implementações como o File Transfer Protocol (FTP), que facilita a transferência de ASCII ou arquivos binários de tamanho arbitrário.

Os soquetes de fluxo são preferíveis aos soquetes de datagrama quando é preciso garantir a chegada dos dados e quando os dados têm um tamanho elevado. Para obter mais informações sobre soquetes de fluxo, consulte a especificação do Windows Sockets. A especificação está disponível no SDK do Windows.

O uso de soquetes de fluxo pode ser superior aos aplicativos projetados para usar um soquete de datagrama para transmissão para todos os soquetes de receção na rede, porque

  • O modelo de transmissão está sujeito a problemas de inundação de rede (ou "tempestade").

  • O modelo cliente-servidor adotado posteriormente é mais eficiente.

  • O modelo de fluxo fornece transferência de dados confiável, onde o modelo de datagrama não fornece.

  • O modelo final aproveita a capacidade de comunicação entre aplicativos de soquete Unicode e ANSI que a classe CArchive empresta à classe CSocket.

    Observação

    Se você usar classe CSocket, você deve usar um fluxo. Uma asserção MFC falhará se você especificar o tipo de soquete como SOCK_DGRAM.

Ver também

Windows Sockets no MFC
Windows Sockets: Introdução