Rozhraní Windows Sockets: Pomocí soketů archivů
Tento článek popisuje programovací model CSocket.Třída CSocket poskytuje podporu soketu na vyšší úrovni abstrakce než třídy CAsyncSocket.CSocketverze protokolu serializace MFC používá k předávání dat do objektu soketu prostřednictvím MFC CArchive objektu.CSocketposkytuje blokování (při správě zpracování zprávy systému Windows na pozadí) a poskytuje přístup k CArchive, který spravuje mnoho aspektů komunikace, které musíte sami pomocí raw rozhraní API nebo třídy CAsyncSocket.
Tip
Můžete použít třídu CSocket samostatně jako vhodnější verzi CAsyncSocket, ale je nejjednodušší model programování pomocí CSocket s CArchive objektu.
Další informace o provádění s archivy sockets naleznete Rozhraní Windows Sockets: Jak pracovat s archivy Sockets.Například kód, viz Rozhraní Windows Sockets: Pořadí operací a Rozhraní Windows Sockets: Příklad Sockets archivy pomocí.Informace o některé funkce, můžete získat vlastní třídy odvozené od třídy sockets, Rozhraní Windows Sockets: Odvozené od třídy Socket.
[!POZNÁMKA]
Aplikace MFC klienta pro komunikaci se servery zavedené (non-MFC) psaní neodesílejte objektů C++ prostřednictvím archivu.Pokud je server aplikace MFC srozumitelného typy objektů, které chcete odeslat, nebude moci přijímat a rekonstrukci objekty.Související materiál o komunikaci s aplikací bez MFC také naleznete v článku Rozhraní Windows Sockets: Pořadí bytů.
Programovací Model CSocket
Použití CSocket objektu zahrnuje vytvoření a přiřazení společně několik objektů tříd MFC.V následující obecný postup je každý krok přijatá server socket a klient soketu, kromě kroku 3, ve kterém každý typ soketu vyžaduje jinou akci.
Tip
V době spuštění serveru obvykle spuštění aplikace poprvé připraven a "naslouchají" při připojení usiluje klientské aplikace.Pokud server není připraven, klient se pokusí připojit, obvykle vyžadují uživatelské aplikace zkuste znovu později.
Nastavit komunikaci mezi server soketu a soketu klienta
Konstrukce CSocket objektu.
Pomocí objektu lze vytvořit základní SOKETU zpracování.
Pro CSocket klienta objektu by normálně používat výchozí parametry vytvořit, pokud potřebujete soketu.Pro CSocket objektu serveru musíte určit port v vytvořit volání.
[!POZNÁMKA]
CArchivenefunguje datagram soketů.Chcete-li použít CSocket soketu, musíte použít třídu, jako byste použili CAsyncSocket, to znamená bez archivu.Protože datagramy nespolehlivé (nikoli zaručené doručení a může opakovat nebo pořadí), nejsou kompatibilní s serializace prostřednictvím archivu.Očekáváte serializace operaci dokončit spolehlivě a sekvence.Pokud se pokusíte použít CSocket s CArchive objektu datagramu, nepravdivých MFC selže.
Pokud klient soket, volání CAsyncSocket::Connect objekt soketu připojení k serveru soketu.
-nebo-
Pokud server soketu, volejte CAsyncSocket::Listen začít poslouchání pokusy o připojení z klienta.Při přijetí požadavku na připojení přijmout voláním CAsyncSocket::Accept.
[!POZNÁMKA]
Přijmout odkaz na novou, prázdnou trvá členské funkce CSocket jako svůj parametr objekt.Tento objekt je nutné vytvořit před volání přijmout.Pokud tento objekt soketu dostane mimo rozsah, ukončí připojení.Nevolejte vytvořit pro tento nový objekt soketu.
Vytvoření CSocketFile objektu přidružení CSocket objekt s ním.
Vytvoření CArchive objekt pro načítání (příjem) nebo ukládání dat (odesílání).Archiv je přidružena CSocketFile objektu.
Pamatujte CArchive nefunguje datagram soketů.
Použití CArchive objektu pro předávání dat mezi sockets klienta a serveru.
Pamatujte dané CArchive objekt přesune data pouze v jednom směru: buď pro načítání (příjem) nebo ukládání (odesílání).V některých případech bude používat dva CArchive objektů: jeden pro odesílání dat, druhý pro potvrzování příjmu.
Po přijetí připojení a nastavení archivu, můžete provádět úkoly, jako je ověření hesla.
Zničit archiv, soubor soketu a objekty soketu.
[!POZNÁMKA]
Třída CArchive dodávky IsBufferEmpty členské funkce pro použití s třídou CSocket.Pokud vyrovnávací paměť obsahuje více datových zpráv, například potřebujete opakovat až do všech těchto číst a vyrovnávací paměti je zrušeno.Jinak vaše další oznámení, že je příjem dat může neomezeně zpozdit.Použití IsBufferEmpty zaručit, že načíst všechna data.
V článku Rozhraní Windows Sockets: Pořadí operací ukazuje na obou stranách tohoto procesu s kódem příkladu.
Více informací naleznete: