1. Was ist Socket‑Programmierung
- Wörtliche Bedeutung von Socket
Das englische Wort „Socket“ bedeutet ursprünglich eine Steckdose. Eine Steckdose stellt eine Verbindung zwischen zwei Seiten her, daher bezeichnet es in der Netzwerkprogrammierung einen Endpunkt für die Netzwerkkommunikation. - Definition der Socket‑Programmierung
Datenkommunikation zwischen mehreren Hosts unter Verwendung der Netzwerkprotokolle TCP / UDP. - Einfache Erklärung
Programme schreiben, damit zwei oder mehr Computer Daten gegenseitig austauschen. Ein typisches Beispiel ist ein Chat‑Werkzeug im lokalen Netzwerk.
Analogie: Steckdose = Netzwerkschnittstelle; Stecker = anderer Host; Einstecken des Steckers = Herstellen einer Netzwerkverbindung.
Um das Konzept besser zu verstehen, lernen wir anhand eines praktischen Beispiels.
2. Entwurf eines einfachen Chat‑Werkzeugs
Architekturmodell: Client‑Server (C/S)
- Server
- An einen lokalen Port binden und kontinuierlich auf eingehende Netzwerkanfragen warten
- Auf Verbindungsversuche anderer Computer warten
- Kommunikationskanal aufbauen, sobald ein Client eine Verbindung herstellt
- Client
Aktiv eine Verbindungsanfrage über Server‑IP‑Adresse und Port‑Nummer senden - Kommunikationsziel: Echtzeit‑Textnachrichten zwischen zwei Computern austauschen, um Sofortchat zu realisieren
Ablauf
- Server starten → Port‑Überwachung aktivieren
- Client starten → Verbindung zu Server‑IP und Port herstellen
- Nach erfolgreicher Verbindung senden und empfangen beide Seiten Nachrichten
Im Folgenden ein minimal einfaches Beispiel
Server
// 1. TcpListener erstellen, um IP und Port zu überwachen
TcpListener listener = new TcpListener(IPAddress.Any, 8899);
listener.Start();
// 2. Auf Client‑Verbindung warten
TcpClient client = await listener.AcceptTcpClientAsync();
// 3. Netzwerk‑Stream abrufen für Nachrichten‑Senden und‑Empfangen
NetworkStream stream = client.GetStream();
Code-Sprache: JavaScript (javascript)
Client
// Verbindung zu Server‑IP und Port aufbauen
TcpClient client = new TcpClient();
await client.ConnectAsync("192.168.1.100",8899);
NetworkStream stream = client.GetStream();Code-Sprache: JavaScript (javascript)
Übersicht