Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Windows Sockets: Verwenden der Klasse
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 eines 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 erzeugt einCAsyncSocket
auf dem 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 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) oderSOCK_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.
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 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 nichtCreate
für dieses neue Socket-Objekt auf. 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.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, dendelete
-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 CAsyncSocket
erstellen, 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: