Sdílet prostřednictvím


Windows Sockets: Sokety datového proudu

Tento článek popisuje sokety streamu, jeden ze dvou dostupných typů rozhraní Windows Socket. (Druhým typem je soket datagramu.)

Sokety streamu poskytují tok dat bez hranic záznamů: datový proud bajtů, který může být obousměrný (aplikace je plně duplexní: může přenášet i přijímat prostřednictvím soketu). Toky je možné spoléhat na poskytování sekvenčně nepatřičných dat. ("Sekvencováno" znamená, že pakety se doručují v uvedeném pořadí. "Zbytečné duplicity" znamená, že získáte konkrétní paket pouze jednou.) Příjem zpráv datových proudů je zaručený a datové proudy jsou vhodné pro zpracování velkých objemů dat.

Vrstva síťového přenosu může rozdělit nebo seskupit data do paketů přiměřené velikosti. Třída CSocket bude zpracovávat balení a rozbalení za vás.

Toky jsou založené na explicitních připojeních: soket A požádá o připojení k soketu B; soket B přijme nebo odmítne žádost o připojení.

Telefonní hovor poskytuje dobrou analogii pro stream. Za normálních okolností uslyší přijímající strana to, co říkáte v pořadí, v jakém ho říkáte, bez duplikace nebo ztráty. Sokety streamu jsou vhodné například pro implementace, jako je protokol FTP (File Transfer Protocol), který usnadňuje přenos ASCII nebo binárních souborů libovolné velikosti.

Sokety datových proudů jsou vhodnější než sokety datagramu, pokud musí být zaručeno doručení dat a kdy je velikost dat velká. Další informace o soketech streamu najdete ve specifikaci rozhraní Windows Sockets. Specifikace je k dispozici v sadě Windows SDK.

Použití soketů datových proudů může být vynikající pro aplikace navržené tak, aby používaly soket datagramu pro vysílání všem přijímajícím soketům v síti, protože

  • Model všesměrového vysílání podléhá problémům se síťovými záplavami (nebo "bouřemi").

  • Model klientského serveru, který byl následně přijat, je efektivnější.

  • Model datového proudu poskytuje spolehlivý přenos dat, kde model datagramu neprovádí.

  • Konečný model využívá schopnost komunikovat mezi aplikacemi Unicode a ANSI soketů, které třídy CArchive půjčuje třídě CSocket.

    Poznámka

    Pokud používáte třídu CSocket, musíte použít datový proud. Kontrolní výraz MFC selže, pokud zadáte typ soketu jako SOCK_DGRAM.

Viz také

Windows Sockets v prostředí MFC
Windows Sockets: Pozadí