Sdílet prostřednictvím


Windows Sockets: Použití třídy CAsyncSocket

Tento článek vysvětluje, jak používat třídu CAsyncSocket. Tato třída zapouzdřuje rozhraní API rozhraní Windows Sockets na velmi nízké úrovni. CAsyncSocket je určen programátoři, kteří podrobně znají síťovou komunikaci, ale chtějí, aby bylo možné volat zpětná volání pro oznámení síťových událostí. Na základě tohoto předpokladu poskytuje tento článek pouze základní instrukce. Pravděpodobně byste měli zvážit použití CAsyncSocket , pokud chcete, aby rozhraní Windows Sockets snadno řešilo více síťových protokolů v aplikaci MFC, ale nechcete obětovat flexibilitu. Můžete se také cítit, že můžete dosáhnout lepší efektivity programováním komunikace přímo sami, než byste mohli použít obecnější alternativní model třídy CSocket.

CAsyncSocketje dokumentován v referenční dokumentaci MFC. Visual C++ také dodává specifikaci rozhraní Windows Sockets umístěnou v sadě Windows SDK. Podrobnosti jsou vám ponechány. Visual C++ neposkytuje ukázkovou aplikaci pro CAsyncSocket.

Pokud nejste vysoce znalí síťové komunikace a chcete jednoduché řešení, použijte třídu CSocket s objektem CArchive . Další informace najdete v tématu Windows Sockets: Použití soketů s archivy .

Tento článek se věnuje následujícím tématům:

Vytvoření a použití CAsyncSocket

Použití CAsyncSocket

  1. CAsyncSocket Vytvořte objekt a pomocí objektu vytvořte podkladový SOCKET popisovač.

    Vytvoření soketu se řídí vzorem MFC dvoufázové konstrukce.

    Příklad:

    CAsyncSocket sock;
    sock.Create(); // Use the default parameters
    

    nebo

    CAsyncSocket *pSocket = new CAsyncSocket;
    int nPort = 27;
    pSocket->Create(nPort, SOCK_DGRAM);
    

    První konstruktor výše vytvoří CAsyncSocket objekt v zásobníku. Druhý konstruktor vytvoří CAsyncSocket na haldě. První Create volání výše používá výchozí parametry k vytvoření soketu streamu. Druhé Create volání vytvoří soket datagramu se zadaným portem a adresou. (V obou verzích můžete použít některou Create z metod konstrukce.)

    Parametry, které mají Create být:

    • "port": krátké celé číslo.

      Pro serverový soket musíte zadat port. U klientského soketu obvykle přijímáte výchozí hodnotu tohoto parametru, která umožňuje rozhraní Windows Sockets vybrat port.

    • Typ soketu: SOCK_STREAM (výchozí) nebo SOCK_DGRAM.

    • "Adresa" soketu, jako "ftp.microsoft.com" "128.56.22.8"je nebo .

      Toto je vaše IP adresa v síti. Pravděpodobně budete vždy spoléhat na výchozí hodnotu tohoto parametru.

    Výrazy "port" a "adresa soketu" jsou vysvětleny v rozhraní Windows Sockets: Porty a adresy soketů.

  2. Pokud je soket klientem, připojte objekt soketu k serverovém soketu pomocí .CAsyncSocket::Connect

    nebo

    Pokud je soket serverem, nastavte soket tak, aby začal naslouchat (s CAsyncSocket::Listen) pro pokusy o připojení z klienta. Po přijetí žádosti o připojení ji přijměte s CAsyncSocket::Accept.

    Po přijetí připojení můžete provádět úkoly, jako je ověřování hesel.

    Poznámka

    Členová Accept funkce jako parametr přebírá odkaz na nový prázdný CSocket objekt. Tento objekt je nutné sestavit před voláním Accept. Pokud tento objekt soketu zmizí z rozsahu, připojení se zavře. Tento nový objekt soketu nevolejte Create . Příklad najdete v článku Windows Sockets: Posloupnost operací.

  3. Komunikaci s jinými sokety provedete voláním CAsyncSocket členských funkcí objektu, které zapouzdřují funkce rozhraní API rozhraní Windows Sockets.

    Podívejte se na specifikaci a třídu CAsyncSocket rozhraní Windows Sockets v referenčních informacích mfc.

  4. CAsyncSocket Zničit objekt.

    Pokud jste vytvořili objekt soketu v zásobníku, jeho destruktor je volána, když obsahující funkce zmizí z rozsahu. Pokud jste vytvořili objekt soketu na haldě pomocí operátoru new , zodpovídáte za použití operátoru delete k zničení objektu.

    Destruktor volá členskou Close funkci objektu před zničením objektu.

Příklad této sekvence v kódu (ve skutečnosti pro CSocket objekt) najdete v tématu Windows Sockets: Posloupnost operací.

Vaše odpovědnosti s CAsyncSocket

Při vytváření objektu třídy CAsyncSocketobjekt zapouzdřuje obslužné rutiny systému Windows SOCKET a poskytuje operace na daném popisovači. Při použití CAsyncSocketmusíte řešit všechny problémy, se kterými se můžete setkat, pokud rozhraní API používáte přímo. Příklad:

  • Scénáře "Blokování".

  • Rozdíly pořadí bajtů mezi odesílajícími a přijímajícími počítači

  • Převod mezi řetězci unicode a vícebajtové znakové sady (MBCS)

Definice těchto termínů a dalších informací naleznete v tématu Windows Sockets: Blocking, Windows Sockets: Byte Ordering, Windows Sockets: Converting Strings.

I přes tyto problémy může být třída CAsyncSocket pro vás správnou volbou, pokud vaše aplikace vyžaduje veškerou flexibilitu a kontrolu, kterou můžete získat. Pokud ne, zvažte místo toho použití třídy CSocket . CSocket skryje mnoho podrobností od vás: pumpuje zprávy systému Windows během blokujících volání a poskytuje přístup k CArchive, který spravuje rozdíly v pořadí bajtů a převod řetězců za vás.

Další informace naleznete v tématu:

Viz také

Windows Sockets v prostředí MFC