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.