Inhaltsverzeichnis
1. Einführung
2. Geschichte
3. Allgemeines
4. Socket Typen
5. Prozessverwaltung
6. Beispielprogramm
- Winsock starten
- Socket erstellen
- Connecten
- Daten empfangen
- Daten senden
- Socket schliesen
- Winsock aufräumen
- Quelltext
7. Literaturverzeichnis
1.) Einführung
Was sind überhaupt Sockets?
Ein Socket (deutscht: Sockel, Stecker) ist ein eine einheitliche Schnittstelle zwischen der Internet und Transportschicht aus dem Internetmodell (Bsp.: TCP/IP) und der Anwedungsschicht (Bsp.: HTTP). Wenn wir also ein Programm schreiben wollen, dass mittels Netzwerk mit einem anderem Programm auf dem anderen Computer kommunizieren sollte, müssen wir auf Sockets zurückgreifen.
2.) Geschichte
Die Entwicklung des Socket-Interfaces lies nicht lange auf sich warten. Es bestand früher das Problem, dass man keine konkreten Parameter und Befehle für die Kommunkationsumsetzung der verschiedenen Protokolle hatte. Und dies hat deutlicht die Programmierung für Netzwerkanwendungen erschwert.
Schließlich entstand Anfang der 80er, im University of California in Berkeley als Ergebnis der langjährigen Forschungsarbeiten ein neues System: BSD-Unix. Es enthielt die API-Socket, die sich schon recht bald als De facto-Standart etablierten. Auch Microsoft übernahm schon recht bald das Socket-Konzept und modellierte daraufhin, das einwenig veränderte Windows Socket (Winsock), dass heute in der zweiten Version vorliegt und die Grundlage der Netzwerkprogrammierung der Windows Betriebssystemen bildet.
3.) Allgemeines
Ein Socket stellt die Kommunikationsschnittstelle zwischen zwei Pogrammen auf der Netzwerkbasis dar. Es gibt insgesamt zwei Socket-Klassen: Client und Server.
Beide werden vom Betriebssystem verwaltet und beide können sowohl Daten verschicken, als auch Daten empfangen.
Die Sockets unterstützen das gängige Netzwerkkonzept:
- Verbindungsaufbau
- Datenaustausch
- Verbindungsende
Sie sind definiert durch die Identifikationsnummer (IP) des Remote, Local-Host und die Portnummer des Remote, Local-Host.
Außerdem arbeiten die Berkley-Sockets auf dem so genannten everything-is-a-file -
Konzept. Das heißt die Sockets können wie gängige Dateien gesehen werden, die per Eingabe/Ausgabe-Behandlung (I/O) behandelt werden können. Genau das verschaffte den Berkley-Sockets soviel Durchsetzungvermögen und Erfolg.
Dabei werden die Sockets wie normale Dateien geöffnet (dafür verwendet man jedoch nicht open(), sondern socket() ) und können wie normale Dateien mit close() geschlossen werden.
Die Daten senden und die Daten empfangen kann man dann mittels write() und read().
Unter Windows haben sich jeodoch die send() and recv() Methoden mehr etabliert. Außerdem muss man beim Windows, bevor man den Socket öffnet ihn mittels des Befehls WSAStarup „aufwärmen“.
4.) Socket Typen
Die Sockets lassen sich jedoch auch noch weiter unterteilen. Es gibt zwei Typen von Sockets die auf der Transportschicht arbeiten: Stream Sockets und Datagram Sockets. Stream Sockets sind dabei die Verbindungsorientieren und sicheren und werden meistens durch das Protokoll TCP vertretten. Datagram Sockets sind die verbindungslosen Sockets und verwenden meistens das Protokoll UDP.
Die Schritte die man dabei vorgeht, sind wie folgt aufgebaut (WINSOCK):
Abbildung in dieser Leseprobe nicht enthalten
5.) Prozessverwaltung
Eines der wichtigen Sachen bei den Sockets stellt das sogenannante handling() auf. Wolle man nun mit dem Server nicht einen Client, sondern 100 gleichzeitig verwalten, reicht da ein Socket nicht aus. Hierfür stehen andere Möglichkeiten zur Verfügung: zum einen könnte man mehrere Socketprozesse kreieren, die einzeln die eingehenden Verbindungen annehmen. Zum anderen könnte man einfach mit dem Befehl select() mehrere Prozesse überwachen und einzeln auf ihre Anfragen reagieren.
Was man jedoch bei den beiden Möglichkeiten beachten sollte, ist die Sicherheit. Denn es ist nämlich ziemlich leicht einen schlecht programmierten, mehrprozessigen Server durch Buffer Overlow (Zu groß verschickte Daten / Zu viele Verbindungen) zum Absturz zu bringen..
6.) Beispiel-Programm
Nun schrieben wir ein kleines Beispiel-Client-Programm. Dabei gehen wir alle wichtigen Schritte von oben bis unten durch. Genau so wie im [C-Worker] Tutorial. Das Programm soll sich am Anfang mit dem Server verbinden, vom ihm erst einmal die Daten empfangen und dann ihm „Hello World“ sendet.
Die Umsetzung erfolgt mit dem Dev-C++ Compiler unter Windows. Achtung! Bevor man zu programmieren anfängt muss man unter
Projekte->Projekt Optionen->Parameter->Linker "-lwsock32" einfügen, um die Winsock Komponente benutzbar zu machen.
1. ) Als erstes wird der Winsock gestartet:
Häufig gestellte Fragen
Was ist ein Socket?
Ein Socket ist eine einheitliche Schnittstelle zwischen der Internet- und Transportschicht (z.B. TCP/IP) und der Anwendungsschicht (z.B. HTTP). Es ermöglicht Programmen, über ein Netzwerk mit anderen Programmen auf anderen Computern zu kommunizieren.
Was ist die Geschichte der Sockets?
Die Socket-Schnittstelle entstand, um die Programmierung für Netzwerkanwendungen zu vereinfachen, da es früher keine klaren Parameter und Befehle für die Kommunikationsumsetzung der verschiedenen Protokolle gab. Anfang der 80er Jahre entstand in Berkeley (University of California) BSD-Unix, das die API-Socket enthielt. Microsoft übernahm dieses Konzept und entwickelte Winsock.
Was sind die Socket-Klassen?
Es gibt zwei Socket-Klassen: Client und Server. Beide werden vom Betriebssystem verwaltet und können Daten senden und empfangen.
Welche Phasen unterstützt ein Socket?
Sockets unterstützen Verbindungsaufbau, Datenaustausch und Verbindungsende.
Wie werden Sockets identifiziert?
Sockets werden durch die Identifikationsnummer (IP) des Remote- und Local-Hosts sowie die Portnummer des Remote- und Local-Hosts definiert.
Wie werden Berkley-Sockets behandelt?
Berkley-Sockets basieren auf dem "everything-is-a-file"-Konzept, wodurch sie wie Dateien behandelt und per Eingabe/Ausgabe (I/O) verwaltet werden können.
Was sind Stream Sockets und Datagram Sockets?
Stream Sockets sind verbindungsorientiert und sicher und verwenden meistens das Protokoll TCP. Datagram Sockets sind verbindungslos und verwenden meistens das Protokoll UDP.
Was ist bei der Prozessverwaltung von Sockets zu beachten?
Bei der Verwaltung mehrerer Clients gleichzeitig können entweder mehrere Socketprozesse erstellt oder der Befehl `select()` verwendet werden, um mehrere Prozesse zu überwachen. Es ist wichtig, die Sicherheit zu beachten, da schlecht programmierte, mehrprozessige Server durch Buffer Overflows zum Absturz gebracht werden können.
Was sind die Schritte für die Entwicklung von Socket Programm unter Windows?
Unter Windows muss vor dem Öffnen des Sockets Winsock mit dem Befehl `WSAStartup` initialisiert werden. Bei der verwendung von Dev-C++, muss "-lwsock32" in den Linker Parametern eingefügt werden.
- Quote paper
- Sergej Epp (Author), 2004, Socket-Programmierung, Munich, GRIN Verlag, https://www.grin.com/document/109556