Erste Schritte mit Winsock
Im Folgenden erhalten Sie eine Schritt-für-Schritt-Anleitung für die ersten Schritte mit Windows Sockets-Programmierung. Es ist darauf ausgelegt, grundlegende Winsock-Funktionen und -Datenstrukturen zu verstehen und zu verstehen, wie sie zusammenarbeiten.
Die Client- und Serveranwendung, die zur Veranschaulichung verwendet wird, ist ein sehr einfacher Client und Server. Komplexere 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 Abschnitten 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 Abschnitten 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
- Abschließen des Winsock-Clientcodes
- Abschließen des Winsock-Servercodes
Erweiterte Winsock-Beispiele
Auf GitHubsind mehrere erweiterte Winsock-Client- und -Serverbeispiele verfügbar. Sie sind unten in der Reihenfolge von einer höheren bis zu einer niedrigeren Leistung aufgeführt und befinden sich in den folgenden Verzeichnissen:
iocp
Dieses Verzeichnis enthält drei Beispielprogramme, die E/A-Abschlussports verwenden. Die Programme enthalten einen 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, iocpclient, entwickelt, um eine Verbindung herzustellen und kontinuierlich Daten an den Server zu senden, um sie mit mehreren Threads zu überlasten. Winsock-Server, die E/A-Abschlussports verwenden, bieten die meisten Leistungsfunktionen.
Überlappen
Dieses Verzeichnis enthält ein Beispielserverprogramm, das überlappende E/A-Synchronisierungen 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 Singlethread-Win32-Anwendung zu multiplexen. Die Verwendung überlappender E/A ermöglicht eine höhere Skalierbarkeit.
WSAPoll
Dieses Verzeichnis 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 eher zur Veranschaulichung und ist kein Hochleistungsserver.
Einfach
Dieses Verzeichnis enthält drei grundlegende Beispielprogramme, die die Verwendung mehrerer Threads durch einen Server veranschaulichen. Die Programme enthalten einen einfachen TCP/UDP-Server (Einfaches), einen reinen TCP-Server (simples _ ioctl), der die Select-Funktion in einer Win32-Konsolenanwendung verwendet, um mehrere Clientanforderungen zu unterstützen, und ein TCP/UDP-Clientprogramm (simplec) zum Testen der Server. Die Server veranschaulichen die Verwendung mehrerer Threads zur Verarbeitung mehrerer Clientanforderungen. Diese Methode weist Skalierbarkeitsprobleme auf, da für jede Clientanforderung ein separater Thread erstellt wird.
accept (Akzeptieren)
Dieses Verzeichnis enthält einen einfachen Beispielserver und ein Clientprogramm. Der Server veranschaulicht die Verwendung von nicht blockierenden Accept-Vorgängen mithilfe der select-Funktion oder der asynchronen Annahme mithilfe der WSAAsyncSelect-Funktion. Dieses Beispiel dient eher zur Veranschaulichung und ist kein Hochleistungsserver.