Windows Sockets: Blockieren

In diesem Artikel werden Datenstromsockets beschrieben, einer der beiden verfügbaren Windows-Sockettypen. (Der andere Typ ist der Datagrammsocket.)

Streamsockets bieten einen Datenfluss ohne Datensatzgrenzen: ein Bytestrom, der bidirektional sein kann (die Anwendung ist vollduplex: sie kann sowohl über den Socket übertragen als auch empfangen werden). Datenströme können verwendet werden, um sequenzierte, nicht lizenzierte Daten bereitzustellen. ("Sequenziert" bedeutet, dass Pakete in der gesendeten Reihenfolge übermittelt werden. "Unduplicated" bedeutet, dass Sie ein bestimmtes Paket nur einmal erhalten.) Der Empfang von Datenstromnachrichten ist garantiert, und Datenströme eignen sich gut für die Verarbeitung großer Datenmengen.

Die Netzwerktransportschicht kann Daten in Paketen mit angemessener Größe aufteilen oder gruppieren. Die CSocket Klasse behandelt die Verpackung und Entpackung für Sie.

Datenströme basieren auf expliziten Verbindungen: Socket A fordert eine Verbindung mit Socket B an; Socket B akzeptiert oder lehnt die Verbindungsanforderung ab.

Ein Telefonanruf bietet eine gute Analogie für einen Datenstrom. Unter normalen Umständen hört die empfangende Partei, was Sie in der Reihenfolge sagen, in der Sie sie sagen, ohne Duplizierung oder Verlust. Stream-Sockets eignen sich z. B. für Implementierungen wie das File Transfer Protocol (FTP), das das Übertragen von ASCII- oder Binärdateien beliebiger Größe erleichtert.

Datenstromsockets sind für Datagrammsockets vorzuziehen, wenn die Daten garantiert ankommen müssen und wenn die Datengröße groß ist. Weitere Informationen zu Datenstromsockets finden Sie in der Windows Sockets-Spezifikation. Die Spezifikation ist im Windows SDK verfügbar.

Die Verwendung von Datenstromsockets kann anwendungen überlegen sein, die für die Verwendung eines Datagrammsockets für die Übertragung an alle empfangenden Sockets im Netzwerk ausgelegt sind, da

  • Das Übertragungsmodell unterliegt Netzwerkfluten (oder "Sturm") Problemen.

  • Das anschließend übernommene Clientservermodell ist effizienter.

  • Das Datenstrommodell liefert eine zuverlässige Datenübertragung, bei der das Datagrammmodell nicht funktioniert.

  • Das endgültige Modell nutzt die Möglichkeit, zwischen Unicode- und ANSI-Socketanwendungen zu kommunizieren, die von der Klasse CArchive für die Klasse CSocket vergeben werden.

    Hinweis

    Wenn Sie die Klasse CSocketverwenden, müssen Sie einen Datenstrom verwenden. Eine MFC-Assertion schlägt fehl, wenn Sie den Sockettyp als SOCK_DGRAM angeben.

Siehe auch

Windows-Sockets in MFC
Windows-Sockets: Hintergrund