Dela via


Windows Sockets: Stream Sockets

I den här artikeln beskrivs strömuttag, en av de två tillgängliga Windows Socket-typerna. (Den andra typen är datagramsocket.)

Stream sockets tillhandahåller ett dataflöde utan postgränser: en ström med byte som kan vara dubbelriktade (programmet är fullständigt duplex: det kan både överföra och ta emot via socketen). Strömmar kan användas för att leverera sekvenserade, oduplicerade data. ("Sekvenserade" innebär att paket levereras i samma ordning som de skickas. "Oduplicerat" innebär att du bara får ett visst paket en gång.) Mottagandet av dataströmmeddelanden garanteras och strömmar är väl lämpade för hantering av stora mängder data.

Nätverkstransportlagret kan dela upp eller gruppera data i paket av rimlig storlek. Klassen CSocket hanterar packningen och uppackningen åt dig.

Strömmar baseras på explicita anslutningar: socket A begär en anslutning till socket B; socket B accepterar eller avvisar anslutningsbegäran.

Ett telefonsamtal ger en bra analogi för en ström. Under normala omständigheter hör den mottagande parten vad du säger i den ordning du säger det, utan duplicering eller förlust. Stream sockets är lämpliga, till exempel för implementeringar som File Transfer Protocol (FTP), som underlättar överföring av ASCII eller binära filer av godtycklig storlek.

Stream sockets är att föredra framför datagram sockets när data måste garanteras att komma in och när datastorleken är stor. Mer information om stream sockets finns i Windows Sockets-specifikationen. Specifikationen är tillgänglig i Windows SDK.

Att använda strömsockets kan vara att föredra framför program som är utformade för att använda ett datagramsocket för sändning till alla mottagande socketer i nätverket eftersom

  • Sändningsmodellen är föremål för problem med nätverksflod (eller "storm").

  • Den klient-servermodell som antas senare är mer effektiv.

  • Dataströmmodellen tillhandahåller tillförlitlig dataöverföring, där datagrammodellen inte gör det.

  • Den slutliga modellen drar nytta av möjligheten att kommunicera mellan Unicode- och ANSI-socketprogram som klass CArchive lånar ut till klass CSocket.

    Anmärkning

    Om du använder klassen CSocketmåste du använda en dataström. En MFC-försäkran misslyckas om du anger sockettypen som SOCK_DGRAM.

Se även

Windows Sockets i MFC
Windows Sockets: Bakgrund