Freigeben über


Windows Sockets: Verwenden der Klasse CAsyncSocket

In diesem Artikel wird die Verwendung der Klasse CAsyncSocketerläutert. Diese Klasse kapselt die Windows Sockets-API auf sehr niedriger Ebene. CAsyncSocket ist für Programmierer vorgesehen, die die Netzwerkkommunikation im Detail kennen, aber die Benutzerfreundlichkeit von Rückrufen für die Benachrichtigung über Netzwerkereignisse wünschen. Basierend auf dieser Annahme enthält dieser Artikel nur grundlegende Anweisungen. Sie sollten wahrscheinlich die Verwendung CAsyncSocket in Betracht ziehen, wenn Sie die Benutzerfreundlichkeit von Windows Sockets mit mehreren Netzwerkprotokollen in einer MFC-Anwendung verwenden möchten, aber keine Flexibilität opfern möchten. Sie können auch das Gefühl haben, dass Sie eine bessere Effizienz erzielen können, indem Sie die Kommunikation direkt programmieren, als sie das allgemeinere alternative Modell der Klasse CSocketverwenden könnten.

CAsyncSocket ist in der MFC-Referenz dokumentiert. Visual C++ stellt außerdem die Windows Sockets-Spezifikation bereit, die sich im Windows SDK befindet. Die Details bleiben Ihnen überlassen. Visual C++ stellt keine Beispielanwendung für CAsyncSocket.

Wenn Sie über die Netzwerkkommunikation nicht sehr vertraut sind und eine einfache Lösung benötigen, verwenden Sie eine Klasse CSocket mit einem CArchive Objekt. Weitere Informationen finden Sie unter Windows Sockets: Verwenden von Sockets mit Archiven .

In diesem Artikel wird Folgendes behandelt:

Erstellen und Verwenden eines CAsyncSocket

So verwenden Sie CAsyncSocket

  1. Erstellen Sie ein CAsyncSocket Objekt, und verwenden Sie das Objekt, um das zugrunde liegende SOCKET Handle zu erstellen.

    Die Erstellung eines Sockets folgt dem MFC-Muster der zweistufigen Konstruktion.

    Beispiel:

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

    -oder-

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

    Der erste Konstruktor oben erstellt ein CAsyncSocket Objekt im Stapel. Der zweite Konstruktor erzeugt ein CAsyncSocket auf dem Heap. Der erste aufruf Create oben verwendet die Standardparameter zum Erstellen eines Datenstromsockets. Der zweite Create Aufruf erstellt einen Datagrammsocket mit einem angegebenen Port und einer angegebenen Adresse. (Sie können beide Versionen mit beiden Create Konstruktionsmethoden verwenden.)

    Die Parameter für Create sind:

    • Ein "Port": ein kurzer Integer.

      Für einen Serversocket müssen Sie einen Port angeben. Für einen Clientsocket akzeptieren Sie in der Regel den Standardwert für diesen Parameter, mit dem Windows Sockets einen Port auswählen können.

    • Ein Sockettyp: SOCK_STREAM (Standard) oder SOCK_DGRAM.

    • Eine Socketadresse wie "ftp.microsoft.com" oder "128.56.22.8".

      Dies ist Ihre IP-Adresse (Internet Protocol) im Netzwerk. Sie sind wahrscheinlich immer auf den Standardwert für diesen Parameter angewiesen.

    Die Begriffe "Port" und "Socketadresse" werden in Windows Sockets erläutert: Ports und Socketadressen.

  2. Wenn der Socket ein Client-Socket ist, wird das Socketobjekt mit einem Server-Socket verbunden, indem CAsyncSocket::Connect verwendet wird.

    -oder-

    Wenn der Socket ein Server ist, richten Sie ihn so ein, dass er mit dem Lauschen (mit CAsyncSocket::Listen) auf Verbindungsversuche von einem Client beginnt. Wenn Sie eine Verbindungsanfrage erhalten haben, akzeptieren Sie sie mit CAsyncSocket::Accept.

    Nachdem Sie eine Verbindung akzeptiert haben, können Sie Aufgaben wie das Überprüfen von Kennwörtern ausführen.

    Hinweis

    Die Accept Memberfunktion verwendet einen Verweis auf ein neues, leeres CSocket Objekt als Parameter. Sie müssen dieses Objekt erstellen, bevor Sie aufrufen Accept. Wenn dieses Socketobjekt außerhalb des Gültigkeitsbereichs liegt, wird die Verbindung geschlossen. Rufen Sie nicht Create für dieses neue Socket-Objekt auf. Ein Beispiel finden Sie im Artikel "Windows Sockets: Sequence of Operations".

  3. Führen Sie die Kommunikation mit anderen Sockets aus, indem Sie die Memberfunktionen des CAsyncSocket Objekts aufrufen, die die Windows Sockets-API-Funktionen kapseln.

    Weitere Informationen finden Sie in der Windows Sockets-Spezifikation und -Klasse CAsyncSocket in der MFC-Referenz.

  4. Zerstören Sie das CAsyncSocket Objekt.

    Wnn Sie das Socket Objekt auf dem Stapeln erstellt haben, wird sein Destruktor aufgerufen, wenn die enthaltende Funktion den Umfang verlässt. Wenn Sie das Socket Objekt auf dem Heap mit dem new- Operator erstellt haben, sind Sie dafür verantwortlich, den delete-Operator zu verwenden, um das Objekt zu zerstören.

    Der Destruktor ruft die Memberfunktion des Close Objekts auf, bevor das Objekt zerstört wird.

Ein Beispiel für diese Sequenz im Code (tatsächlich für ein CSocket Objekt) finden Sie unter Windows Sockets: Sequence of Operations.

Ihre Verantwortung mit CAsyncSocket

Wenn Sie ein Objekt der Klasse CAsyncSocketerstellen, kapselt das Objekt ein Windows-Handle SOCKET und liefert Vorgänge auf diesem Handle. Wenn Sie CAsyncSocket verwenden, müssen Sie alle Probleme angehen, die bei der direkten Nutzung der API auftreten können. Beispiel:

  • "Blockierungsszenarien".

  • Bytereihenfolgeunterschiede zwischen den Sende- und Empfangscomputern.

  • Konvertieren zwischen Unicode- und multibyte-Zeichenfolgen (MBCS).

Definitionen dieser Begriffe und zusätzliche Informationen finden Sie unter Windows Sockets: Blocking, Windows Sockets: Byte-Sortierung, Windows Sockets: Konvertieren von Zeichenfolgen.

Trotz dieser Probleme ist die Klasse CAsyncSocket möglicherweise die richtige Wahl für Sie, wenn Ihre Anwendung alle Flexibilität und Kontrolle erfordert, die Sie erhalten können. Falls nicht, sollten Sie stattdessen die Verwendung der Klasse CSocket in Betracht ziehen. CSocket verbirgt viele Details vor Ihnen: Es pumpt Windows-Nachrichten während blockierender Anrufe und verschafft Ihnen Zugriff auf CArchive, das die Verwaltung von Bytereihenfolgenunterschieden und die Zeichenfolgenkonvertierung für Sie übernimmt.

Weitere Informationen finden Sie unter:

Siehe auch

Windows Sockets in MFC