Erste Schritte mit Winsock
Dieser Abschnitt enthält eine schrittweise Anleitung zu den ersten Schritten mit der Programmierung von Windows Sockets. Es wurde entwickelt, um ein Verständnis der grundlegenden Winsock-Funktionen und Datenstrukturen und deren Zusammenarbeit bereitzustellen.
Die Client- und Serveranwendung, die wir in diesem Thema zur Veranschaulichung verwenden, ist ein sehr einfacher Client und Server. Erweiterte Codebeispiele sind in den Beispielen enthalten, die im Microsoft Windows Software Development Kit (SDK) enthalten sind.
Die ersten Schritte sind für Client- und Serveranwendungen identisch.
- Informationen zu Servern und Clients
- Erstellen einer einfachen Winsock-Anwendung
- Initialisieren von Winsock
In den folgenden Artikeln werden die verbleibenden Schritte zum Erstellen einer Winsock-Clientanwendung beschrieben.
- Erstellen eines Sockets für den Client
- Herstellen einer Verbindung mit einem Socket
- Senden und Empfangen von Daten auf dem Client
- Trennen des Clients
In den folgenden Artikeln werden die verbleibenden Schritte zum Erstellen einer Winsock-Serveranwendung beschrieben.
- Erstellen eines Sockets für den Server
- Binden eines Sockets
- Lauschen an einem Socket
- Akzeptieren einer Verbindung
- Empfangen und Senden von Daten auf dem Server
- Trennen des Servers
Der vollständige Quellcode für diese grundlegenden Beispiele.
- Ausführen des Winsock-Client- und Servercodebeispiels
- Vollständiger Winsock-Clientcode
- Vollständiger Winsock-Servercode
Erweiterte Winsock-Beispiel-Apps
Mehrere erweiterte Winsock-Client- und Serverbeispiel-Apps sind auf GitHub verfügbar. Sie werden hier in der Reihenfolge von höherer bis niedrigerer Leistung aufgeführt und befinden sich in den folgenden Verzeichnissen:
iocp
Dieser Ordner enthält drei Beispielprogramme, die E/A-Vervollständigungsports verwenden. Zu den Programmen gehören: ein Winsock-Server,
iocpserver
, der die WSAAccept-Funktion verwendet; einen Winsock-Server,iocpserverex
der die AcceptEx-Funktion verwendet; und einen einfachen Multithread-Winsock-Client,iocpclient
der zum Testen eines dieser Server verwendet wird.Die Serverprogramme unterstützen mehrere Clients, die eine Verbindung über TCP/IP herstellen und Datenpuffer beliebiger Größe senden, die der Server dann an den Client zurückgibt. Der Einfachheit halber wurde ein einfaches Clientprogramm entwickelt,
iocpclient
um eine Verbindung herzustellen und kontinuierlich Daten an den Server zu senden, um ihn mit mehreren Threads zu belasten. Winsock-Server, die E/A-Vervollständigungsports verwenden, bieten die höchste Leistung.Überlappen
Dieser Ordner enthält ein Beispielserverprogramm, das überlappende E/A verwendet. Das Beispielprogramm verwendet die AcceptEx-Funktion und überlappende E/A, um mehrere asynchrone Verbindungsanforderungen von Clients effektiv zu verarbeiten. Der Server verwendet die AcceptEx-Funktion , um verschiedene Clientverbindungen in einer Win32-Anwendung mit singlethreads zu multiplexen. Die Verwendung überlappender E/A-Vorgänge ermöglicht eine höhere Skalierbarkeit.
WSAPoll
Dieser Ordner enthält ein einfaches Beispielprogramm, das die Verwendung der WSAPoll-Funktion veranschaulicht. Das kombinierte Client- und Serverprogramm ist nicht blockierend und verwendet die WSAPoll-Funktion , um zu bestimmen, wann das Senden oder Empfangen ohne Blockierung möglich ist. Dieses Beispiel dient zur Veranschaulichung und ist kein Hochleistungsserver.
Einfach
Dieser Ordner enthält drei grundlegende Beispielprogramme, die die Verwendung mehrerer Threads durch einen Server veranschaulichen. Zu den Programmen gehören: ein einfacher TCP/UDP-Server,
simples
ein nur TCP-Server,simples_ioctl
der die Select-Funktion in einer Win32-Konsolenanwendung verwendet, um mehrere Clientanforderungen zu unterstützen, und ein TCP/UDP-Clientprogramm zumsimplec
Testen der Server. Die Server veranschaulichen die Verwendung mehrerer Threads zum Verarbeiten mehrerer Clientanforderungen. Diese Methode hat Skalierbarkeitsprobleme, da für jede Clientanforderung ein separater Thread erstellt wird.accept (Akzeptieren)
Dieser Ordner enthält ein einfaches Beispielserver und Clientprogramm. Der Server veranschaulicht die Verwendung der nicht blockierenden Accept-Funktion mithilfe der Select-Funktion oder der asynchronen Annahme mithilfe der WSAAsyncSelect-Funktion . Dieses Beispiel dient zur Veranschaulichung und ist kein Hochleistungsserver.