Compartilhar via


Windows Sockets: soquetes de fluxo

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

Os soquetes de fluxo fornecem um fluxo de dados sem limites de registros: um fluxo de bytes que pode ser bidirecional (o aplicativo é duplex completo: ele pode transmitir e receber por meio do soquete). Os fluxos podem receber solicitações para fornecer dados sequenciados e não duplicados. ("Sequenciado" significa que os pacotes são entregues na ordem enviada. "Não duplicados" significa que você obtém 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 classe CSocket manipulará o empacotamento e a descompactação 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 receptora ouve o que se fala na ordem em que se fala diz, sem duplicação ou perda. Os soquetes de fluxo são apropriados, por exemplo, para implementações como o File Transfer Protocol (FTP), que facilita a transferência de arquivos ASCII ou binários de tamanho arbitrário.

Soquetes de fluxo são preferíveis aos soquetes de datagrama quando os dados devem ser garantidos para chegar e quando o tamanho dos dados é grande. Para obter mais informações sobre o bloqueio, 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 em aplicativos projetados para usar um soquete de datagrama para transmitir para todos os soquetes de recebimento 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, ao passo que o modelo de datagrama não.

  • O modelo final aproveita a capacidade de se comunicar entre aplicativos de soquete Unicode e ANSI que a classe CArchive empresta à classe CSocket.

    Observação

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

Confira também

Windows Sockets em MFC
Windows Sockets: contexto