Sdílet prostřednictvím


Windows Sockets: Použití soketů s archivy

Tento článek popisuje CSocket programovací model.Třída CSocket poskytuje podporu soketu na vyšší úrovni abstrakce, než třída CAsyncSocket.CSocketk předání dat do a z objekt pomocí knihovny MFC používá verzi protokolu serializace MFC CArchive objektu.CSocketobsahuje blokování (při správě pozadí zpracování zprávy systému Windows) a poskytuje přístup k CArchive, který spravuje mnoho aspektů komunikace, které by mělo dělat sami pomocí surového API nebo třídy CAsyncSocket.

Tip

Můžete použít třídu CSocket samostatně jako vhodnější verzi CAsyncSocket, ale je nejjednodušší programovací model pro použití CSocket se CArchive objektu.

Další informace o způsobu provádění soketů s archivy práce naleznete v Windows Sockets: Jak pracují sokety s archivy.Příklad kódu naleznete v tématu Windows Sockets: Posloupnost operací a Windows Sockets: Příklady soketů využívajících archivy.Informace o některých funkcích, můžete získat své vlastní třídy odvozené od třídy sockets naleznete v tématu Windows Sockets: Odvozování z tříd soketů.

[!POZNÁMKA]

Pokud vytváříte aplikace MFC klienta pro komunikaci se servery zjištěné (non-MFC), neodesílejte objektů jazyka C++ do archivu.Pokud je server aplikace knihovny MFC, který rozumí typy objektů, které chcete odeslat, nebude moci přijímat a rekonstrukci objektů.Související materiál na téma komunikace s non-MFC aplikace také naleznete v článku Windows Sockets: Pořadí bajtů.

Programovací Model CSocket

Použití CSocket objekt zahrnuje vytvoření a přiřazení dohromady několik objektů třídy knihovny MFC.V následující obecný postup v každém kroku převezme server socket a klient soketu, s výjimkou v kroku 3, v němž každý typ soketu vyžaduje jinou akci.

Tip

V době spuštění serverové aplikace obvykle začne nejprve být připravené a "naslouchají" když klientská aplikace požádá o připojení.Pokud server není připraven, pokud se klient pokusí o připojení, obvykle vyžadují aplikaci uživatele zkuste se připojit znovu později.

Chcete-li nastavit komunikaci mezi server socket a klient soket

  1. Konstrukce CSocket objektu.

  2. Pomocí objektu lze vytvořit základní SOCKET zpracování.

    Pro CSocket objekt klienta, obvykle byste měli použít výchozí parametry pro vytvořit, pokud potřebujete datagramový soket.Pro CSocket objekt serveru, musíte určit port v vytvořit volání.

    [!POZNÁMKA]

    CArchivenefunguje s datagram soketů.Pokud chcete použít CSocket pro datagramový soket, musíte použít třídu jako CAsyncSocket, který je bez archivu.Vzhledem k tomu, že nespolehlivé datagramů (nikoli zaručené doručení se může opakovat nebo mimo pořadí), nejsou kompatibilní s serializace prostřednictvím archivu.Serializace operaci dokončete spolehlivě a postupně očekáváte.Pokud se pokusíte použít CSocket se CArchive objekt pro datagram, MFC nepravdivých nezdaří.

  3. Soket je klient, kontaktujte CAsyncSocket::Connect socket objekt připojení k serveru soketu.

    -nebo-

    Soket je server, kontaktujte CAsyncSocket::Listen zahájit naslouchání pro pokusy o připojení pomocí klienta.Při přijetí požadavku na připojení, přijmout voláním CAsyncSocket::Accept.

    [!POZNÁMKA]

    Přijmout členské funkce přijímá odkaz na nový, prázdné CSocket jako svůj parametr objekt.Je nutné vytvořit tento objekt před voláním přijmout.Pokud tento objekt je mimo rozsah, připojení ukončeno.Nevolejte vytvořit pro tento nový objekt.

  4. Vytvořit CSocketFile objekt přiřazení CSocket objekt s ním.

  5. Vytvořit CArchive objekt pro načítání (příjem) nebo ukládání dat (odesílání).Archiv je přidružen CSocketFile objektu.

    Mějte na paměti, že CArchive nefunguje s datagram soketů.

  6. Použití CArchive objekt pro předávání dat mezi klienta a serveru soketů.

    Mějte na paměti, že dané CArchive objekt přesune data pouze v jednom směru: buď pro nakládku (příjem) nebo ukládání (odeslání).V některých případech budete používat dva CArchive objekty: 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.

  7. Zničte archiv, soubor soketu a objekty soketu.

    [!POZNÁMKA]

    Třída CArchive dodává IsBufferEmpty členské funkce pro použití s třídou CSocket.Vyrovnávací paměť obsahuje více datových zpráv, například, je třeba opakovat, dokud se všechny z nich jsou čtení a vyrovnávací paměť je vymazána.Jinak vaše další oznámení, že se data, která mají být přijata může neomezeně dlouho odkládá.Použití IsBufferEmpty ujistit, že můžete načíst všechna data.

V článku Windows Sockets: Posloupnost operací ukazuje na obou stranách tohoto procesu s kódem příkladu.

Další informace naleznete v části:

Viz také

Referenční dokumentace

CSocket::Create

Koncepty

Windows sockets v prostředí MFC