Delen via


Windows Sockets: Stream Sockets

In dit artikel worden streamsockets beschreven, een van de twee beschikbare Windows Socket-typen. (Het andere type is de datagramsocket.)

Stream sockets bieden een gegevensstroom zonder recordgrenzen: een stroom van bytes die bidirectioneel kunnen zijn (de toepassing is full duplex: deze kan zowel via de socket worden verzonden als ontvangen). Streams kunnen worden gebruikt om gesequentieerde, niet-gedupliceerde gegevens te leveren. ('Gesequentieerd' betekent dat pakketten worden afgeleverd in de volgorde die wordt verzonden. "Niet-gedupliceerd" betekent dat u slechts één keer een bepaald pakket krijgt.) Ontvangst van streamberichten is gegarandeerd en streams zijn geschikt voor het verwerken van grote hoeveelheden gegevens.

De netwerktransportlaag kan gegevens opsplitsen of groeperen in pakketten van redelijke grootte. De CSocket klasse verwerkt de verpakking en uitpakken voor u.

Streams zijn gebaseerd op expliciete verbindingen: socket A vraagt een verbinding aan met socket B; socket B accepteert of weigert de verbindingsaanvraag.

Een telefoongesprek biedt een goede analogie voor een stream. Onder normale omstandigheden hoort de ontvangende partij wat u zegt in de volgorde waarin u het zegt, zonder duplicatie of verlies. Stream-sockets zijn bijvoorbeeld geschikt voor implementaties zoals het File Transfer Protocol (FTP), waarmee ASCII- of binaire bestanden van willekeurige grootte kunnen worden overgebracht.

Stroomsockets hebben de voorkeur boven datagramsockets wanneer de gegevens gegarandeerd moeten binnenkomen en wanneer de omvang van de gegevens groot is. Raadpleeg de Windows Sockets-specificatie voor meer informatie over streamsockets. De specificatie is beschikbaar in de Windows SDK.

Het gebruik van stroomsockets kan beter zijn dan toepassingen die zijn ontworpen om een datagramsocket te gebruiken voor uitzending naar alle ontvangende sockets in het netwerk, omdat

  • Het broadcastmodel kan problemen ondervinden met netwerkoverbelasting of een 'broadcast storm'.

  • Het client-servermodel dat vervolgens wordt aangenomen, is efficiënter.

  • Het stroommodel levert betrouwbare gegevensoverdracht, waarbij het datagrammodel dat niet doet.

  • Het uiteindelijke model maakt gebruik van de mogelijkheid om te communiceren tussen Unicode- en ANSI-sockettoepassingen die klasse CArchive biedt aan klasse CSocket.

    Opmerking

    Als u klasse CSocketgebruikt, moet u een stream gebruiken. Een MFC-assertie mislukt als u het sockettype opgeeft als SOCK_DGRAM.

Zie ook

Windows Sockets in MFC
Windows Sockets: Achtergrond