Windows Sockets: Verwenden der Klasse CAsyncSocket
In diesem Artikel wird die Verwendung der Klasse CAsyncSocket
erlä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 CSocket
verwenden 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
Objekts.
Erstellen und Verwenden einer CAsyncSocket
So verwenden Sie CAsyncSocket
Erstellen Sie ein
CAsyncSocket
Objekt, und verwenden Sie das Objekt, um das zugrunde liegendeSOCKET
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 erstellt einenCAsyncSocket
für den Heap. Der erste aufrufCreate
oben verwendet die Standardparameter zum Erstellen eines Datenstromsockets. Der zweiteCreate
Aufruf erstellt einen Datagrammsocket mit einem angegebenen Port und einer angegebenen Adresse. (Sie können beide Versionen mit beidenCreate
Konstruktionsmethoden verwenden.)Die folgenden Parameter sind:
Create
Ein "Port": eine kurze ganze Zahl.
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) oderSOCK_DGRAM
.Eine Socketadresse, z
"ftp.microsoft.com"
. B. 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.
Wenn es sich bei dem Socket um einen Client handelt, verbinden Sie das Socketobjekt mithilfe von
CAsyncSocket::Connect
.Oder
Wenn es sich bei dem Socket um einen Server handelt, legen Sie den Socket so fest, dass er mit dem Überwachen (mit
CAsyncSocket::Listen
) für Verbindungsversuche von einem Client beginnt. Wenn Sie eine Verbindungsanfrage erhalten haben, akzeptieren Sie sie mitCAsyncSocket::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, leeresCSocket
Objekt als Parameter. Sie müssen dieses Objekt erstellen, bevor Sie aufrufenAccept
. Wenn dieses Socketobjekt außerhalb des Gültigkeitsbereichs liegt, wird die Verbindung geschlossen. Rufen Sie dieses neue Socketobjekt nicht aufCreate
. Ein Beispiel finden Sie im Artikel "Windows Sockets: Sequence of Operations".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.Zerstören Sie das
CAsyncSocket
Objekt.Wenn Sie das Socketobjekt auf dem Stapel erstellt haben, wird dessen Destruktor aufgerufen, wenn die enthaltende Funktion außerhalb des Gültigkeitsbereichs liegt. Wenn Sie das Socketobjekt auf dem Heap erstellt haben, verwenden Sie den
new
Operator, umdelete
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 Verantwortlichkeiten mit CAsyncSocket
Wenn Sie ein Objekt der Klasse CAsyncSocket
erstellen, kapselt das Objekt ein Windows-Handle SOCKET
und liefert Vorgänge auf diesem Handle. Wenn Sie diese Verwenden verwenden CAsyncSocket
, müssen Sie alle Probleme behandeln, die bei der direkten Verwendung der API auftreten können. Beispiel:
"Blockierungsszenarien".
Bytereihenfolgeunterschiede zwischen den Sende- und Empfangscomputern.
Konvertieren zwischen Unicode- und Multibyte-Zeichensatzzeichenfolgen (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
blendet viele Details von Ihnen aus: Windows-Nachrichten werden während des Blockierens von Anrufen gepumpt und erhalten Zugriff, CArchive
der Die Bytereihenfolgenunterschiede und die Zeichenfolgenkonvertierung für Sie verwaltet.
Weitere Informationen finden Sie unter: