Freigeben über


Windows Sockets: Verwenden von Sockets mit Archiven

In diesem Artikel wird beschrieben CSocket-Programmiermodell.Klassen- CSocket stellt Unterstützung für socket auf einer höheren Ebene der Abstraktion, als Klasse CAsyncSocket ausführt.CSocket wird eine Version des MFC-Serialisierungs protokolls, um Daten in und aus einem Socket Objekt durch ein Objekt CArchive MFC zu übermitteln.CSocket stellt das Blockieren (beim Verwalten von Windows-Meldungen die Hintergrundverarbeitung) und gibt Ihnen Zugriff auf CArchive, der viele Aspekte der Kommunikation verwaltet, dass Sie entweder mit dem unformatierten APIs oder der Klasse müssen sich CAsyncSocket würden.

TippTipp

Sie können CSocket-Klasse als bequemere Version von CAsyncSocket allein verwenden, aber das einfachste Programmiermodell ist, CSocket mit einem CArchive-Objekt zu verwenden.

Weitere Informationen darüber, wie die Implementierung von Sockets mit Archiven finden Sie unter Windows Sockets: Wie Sockets mit Archiven arbeiten.Beispielcode finden Windows Sockets: Sequenz von Vorgängen und Windows Sockets: Beispiel für Sockets mithilfe der Archive.Weitere Informationen über einen Teil der Funktionen, die Sie erhalten können, indem Sie eigene Klassen aus Socketklassen abgeleitet sind, finden Sie unter Windows Sockets: Ableiten von Socket-Klassen.

HinweisHinweis

Wenn Sie ein MFC-Clientprogramm schreiben, um mit eingerichteten (MFC-fremde) Servern zu kommunizieren, senden Sie C++-Objekte nicht durch das Archiv.Sofern der Server eine MFC-Anwendung, die die Arten von Objekten versteht, Sie senden möchten, ist es nicht möglich, die Objekte zu empfangen bzw. zu deserialisieren.Eine Änderung des Verständigens verwandtes Material mit MFC-fremden Anwendungen finden Sie im Artikel Windows Sockets: Bytereihenfolge.

Das CSocket-Programmiermodell

Verwenden eines CSocket-Objekts umfasst eine Reihe MFC-Klassen- mit einem Objekte zusammen zu erstellen und zu verknüpfen.In der allgemeinen Prozedur unten wird jeder Schritt durch den Server und den Client socket socket, außer Schritt 3 unternommen, wobei jeder Sockettyp eine andere Aktion erfordert.

TippTipp

Zur Laufzeit wird die Serveranwendung normalerweise zuerst, um lauschend und "Bereit" zu sein, wenn die Clientanwendung eine Verbindung gefunden wird.Wenn der Server nicht bereit ist, wenn der Client versucht herzustellen, benötigen Sie normalerweise die Benutzer-Anwendung später erneut versuchen, eine Verbindung herzustellen.

So socket Kommunikation zwischen einem Client und einem Server installieren socket

  1. Erstellen Sie ein CSocket-Objekt.

  2. Verwenden Sie das Objekt, um das zugrunde liegende SOCKET Handle zu erstellen.

    Für ein CSocket Clientobjekt sollten Sie die Standardparameter verwenden normalerweise Erstellen werden, es sei denn, Sie benötigen einen Datagrammsocket.Für ein CSocket Serverobjekt müssen Sie einen Port in Create Aufruf angeben.

    HinweisHinweis

    CArchive funktioniert nicht mit Datagrammsockets.Wenn Sie CSocket für einen Datagrammsocket verwenden möchten, müssen Sie die Klasse verwenden, da Sie CAsyncSocket ohne d. h. ein Archiv verwenden würden.Da Datagramme (nicht garantiert werden kann, oder anzukommen und Reihenfolge), wiederholt unzuverlässig sind, sind sie nicht mit Serialisierung durch ein Archiv kompatibel.Sie erwarten, um den Serialisierungsvorgang zuverlässig und nacheinander abzuschließen.Wenn Sie versuchen, CSocket mit einem CArchive-Objekt für ein Datagramm zu verwenden, schlägt eine MFC-Assertion aus.

  3. Wenn der Socket ein Client ist, rufen Sie CAsyncSocket::Connect Socket an, um das Objekt für einen Server socket herzustellen.

    - oder -

    Wenn der Socket geschlossen wird, einen Server CAsyncSocket::Listen Aufruf, um den Hörens Versuche zum Starten von einem Client an.Nach dem Empfang einer Verbindungsanforderung, übernehmen Sie sie, indem Sie CAsyncSocket::Accept aufrufen.

    HinweisHinweis

    Die Annehmen-Memberfunktion verwendet einen Verweis auf einen neuen, leeren CSocket-Objekt als Parameter.Sie müssen dieses Objekt erstellen, bevor Sie Annehmen aufrufen.Wenn dieser Socket Objekt den Gültigkeitsbereich verlässt, wird die Verbindung.Rufen Sie nicht Create für dieses neue Socket Objekt an.

  4. Erstellen Sie ein CSocketFile-Objekt und das CSocket-Objekt mit ihm zugeordnet sind.

  5. Erstellen Sie ein CArchive-Objekt entweder für den Empfang) (Laden oder Speichern (Submit) von Daten.Das Archiv mit dem CSocketFile-Objekt zugeordnet.

    Beachten Sie, dass CArchive nicht mit Datagrammsockets funktioniert.

  6. Verwenden Sie das CArchive-Objekt das Übergeben von Daten zwischen dem Client und dem Server sockets.

    Beachten Sie, dass ein angegebenes Objekt CArchive Daten nur in einer Richtung verschieben: entweder zum Laden (empfangen) oder Speichern (Submit).In einigen Fällen verwenden Sie zwei CArchive-Objekte: Ein für das Senden von Daten, die andere zum Empfangen von Bestätigungen.

    Nachdem Sie eine Verbindung akzeptiert haben und das Archiv installiert haben, können Sie diese Aufgaben wie Kennwörter, Überprüfung ausführen.

  7. Zerstören Sie das Archiv Socket, die Datei und die Socket Objekte.

    HinweisHinweis

    Klassen, die IsBufferEmptyCArchive-Memberfunktion speziell für die Verwendung mit CSocket-Klasse.Wenn der Puffer enthält mehrere Datennachrichten müssen Sie z. B. durchlaufen, bis alle gelesen wurden, und der Puffer gelöscht wird.Andernfalls wird die folgende Benachrichtigung, dass sie die Daten empfangen werden, wird unbegrenzt verzögert werden.Verwenden Sie zum IsBufferEmpty sicherstellen, dass Sie alle Daten abrufen.

Der Artikel Windows Sockets: Sequenz von Vorgängen veranschaulicht beide Seiten des Prozesses mit Beispielcode.

Weitere Informationen finden Sie unter:

Siehe auch

Referenz

CSocket::Create

Konzepte

Windows Sockets in MFC