Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.
Wenn Sie die WebSocket API verwenden möchten, ist es nützlich, wenn Sie einen Server haben. In diesem Artikel zeige ich Ihnen, wie Sie einen in C# schreiben können. Sie können es in jeder serverseitigen Sprache tun, aber um die Dinge einfach und verständlich zu halten, habe ich mich für die Sprache von Microsoft entschieden.
Dieser Server entspricht RFC 6455, daher wird er nur Verbindungen von Chrome Version 16, Firefox 11, IE 10 und höher verarbeiten.
WebSockets kommunizieren über eine TCP (Transmission Control Protocol)-Verbindung. Glücklicherweise verfügt C# über eine TcpListener-Klasse, die ihren Namen gerecht wird. Sie befindet sich im System.Net.Sockets-Namespace.
Hinweis: Es ist eine gute Idee, den Namespace mit dem using-Schlüsselwort einzuschließen, um weniger schreiben zu müssen. Es ermöglicht die Nutzung der Klassen eines Namespaces, ohne jedes Mal den vollständigen Namespace zu schreiben.
Konstruktor:
localAddr gibt die IP des Listeners an, und port gibt den Port an.
Hinweis: Um ein IPAddress-Objekt aus einem string zu erstellen, verwenden Sie die statische Methode Parse von IPAddress.
Methoden:
Hier ist eine minimalistische Server-Implementierung:
Methoden:
Eigenschaften:
Methoden:
Schreibvorgänge von Bytes aus einem Puffer, Offset und Größe bestimmen die Länge der Nachricht.
Lesevorgänge von Bytes in buffer. offset und size bestimmen die Länge der Nachricht.
Erweitern wir unser Beispiel.
Wenn ein Client sich mit einem Server verbindet, sendet er eine GET-Anfrage, um die Verbindung von einer einfachen HTTP-Anfrage zu einem WebSocket aufzuwerten. Dies wird als Handshaking bezeichnet.
Dieser Beispielcode kann ein GET vom Client erkennen. Beachten Sie, dass dies blockiert, bis die ersten 3 Bytes einer Nachricht verfügbar sind. Für Produktionsumgebungen sollten alternative Lösungen untersucht werden.
Die Antwort ist einfach zu erstellen, aber möglicherweise etwas schwierig zu verstehen. Die vollständige Erklärung des Server-Handshakes finden Sie in RFC 6455, Abschnitt 4.2.2. Für unsere Zwecke erstellen wir nur eine einfache Antwort.
Sie müssen:
Nach einem erfolgreichen Handshake sendet der Client codierte Nachrichten an den Server.
Wenn wir "MDN" senden, erhalten wir diese Bytes:
129 131 61 84 35 6 112 16 109Sehen wir uns an, was diese Bytes bedeuten.
Das erste Byte, das derzeit den Wert 129 hat, ist ein Bitfeld, das sich wie folgt aufschlüsselt:
| 1 | 0 | 0 | 0 | 0x1=0001 |
Das zweite Byte, das derzeit den Wert 131 hat, ist ein weiteres Bitfeld, das sich folgendermaßen aufschlüsselt:
| 1 | 0x83=0000011 |
Hinweis: Da das erste Bit für Nachrichten von Client zu Server immer 1 ist, können Sie 128 von diesem Byte subtrahieren, um das MASK-Bit zu entfernen.
Beachten Sie, dass das MASK-Bit in unserer Nachricht gesetzt ist. Dies bedeutet, dass die nächsten vier Bytes (61, 84, 35 und 6) die Maskenbytes sind, die verwendet werden, um die Nachricht zu dekodieren. Diese Bytes ändern sich mit jeder Nachricht.
Die verbleibenden Bytes sind der kodierte Nachrichteninhalt.
D_i = E_i XOR M_(i mod 4)
wo D das dekodierte Nachrichtenarray ist, E das kodierte Nachrichtenarray, M das Maskenbytearray und i der Index des zu dekodierenden Nachrichtenbytes ist.
Beispiel in C#:
Der Bauplan für ein besseres Internet.
Besuche die gemeinnützige Muttergesellschaft der Mozilla Corporation, die Mozilla Foundation.
Teile dieses Inhalts sind ©1998–2026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfügbar unter einer Creative-Commons-Lizenz.