Home » Tutorials » Netzwerk und Internet » Sockets mit WinAPI

Sockets mit WinAPI

Einleitung

Inhalt

Dieses Tutorial behandelt das Versenden und das Empfangen von Nachrichten in einem Netzwerk. Nun ist dies mit Delphi nicht das große Problem. Es gibt ja schon im Auslieferungszustand entsprechende Komponenten und dazu noch die Indy-Komponenten, welche das Versenden und Empfangen von Nachrichten aus der IP-Welt vereinfachen. Dieses Tutorial soll aber an den Komponenten vorbei, Pakete durch das Netzwerk schicken. Kurzum: Wie Versenden und Empfangen wir Nachrichten mit dem Windows Application Programming Interface (kurz: WinAPI)?
Das Tutorial geht dabei speziell auf die am häufigsten verwendeten Transportprotokolle TCP und UDP ein. Dazu werden wir folgendes kennen lernen:

  • Einrichten eines TCP-Servers
  • Einrichten eines TCP-Clients
  • Einrichten eines UDP-Sockets
  • Andere Socketparameter einstellen und auslesen
  • Und natürlich kommunizieren über Ethernet und Internet

Abschließend gibt es noch ein (oder auch zwei) kleines Progrämmchen zum Spielen.
Ich werde in dem Tutorial versuchen weitestgehend eine gerade Linie im Erklären der Sockets einzuhalten. Es gibt immer noch alternative Möglichkeiten und erweiterte Optionen, wie man Sockets nutzen kann. Für die Übersichtlichkeit werde ich aber auf einige Dinge verzichten, die sich der geneigte Leser selber aneignen darf.
Alle Funktionen sind für das bekannte IPv4. Die Änderungen für IPv6 sind nur klein.

Vorraussetzungen

Ich werde hier nicht die Grundlagen des Netzwerkverkehrs erläutern. Dazu verweise ich diskret auf Wikipedia oder Literatur. Speziell sollte man sich da mal die Grundlagen zum OSI-Schichtenmodell, zum Aufbau der einzelnen Protokolle und was der Unterschied zwischen UDP und TCP ist, ansehen.
Weiterhin benötigen wir hier ein klein wenig Pointerarithmetik (eher Pointer als Arithmetik) und natürlich grundlegende Pascalkentnisse sowie ein wenig Message-Handling. Schön ist es auch, wenn das Wort „Socket“ schon mal bekannt ist.
Fehlende WinAPI-Erfahrungen sollten keine Probleme bereiten.

Und warum jetzt Sockets über Windows API

Das ist natürlich eine berechtigte Frage, vor allem, wenn es doch so tolle Komponenten gibt.
Dazu gibt es erstmal die Standardantwort, wenn es darum geht ohne solche Komponenten zu arbeiten: Man erspart sich den Overhead aus den Bibliotheken und von Klassenelementen, die man nicht braucht. Demzufolge ist es eben für ein schlankes Programm dienlich.
Die zweite Antwort ist, dass man einmal mehr versteht, was hinter den Kulissen von Komponenten passiert, die viele täglich benutzen.
Und zuletzt ist auch die Programmierung von Sockets recht einfach, sodass man je nach Aufgabe, ein Netzwerkpaket schon mit 2 kurzen Befehlen (OK, es sind eigentlich 3) absenden kann. Und damit schließt sich der Kreis zu Punkt 1. Für kleine Netzwerkaufgaben, IPC (Interprozesskommunikation) und schlanke Programme ist vielleicht die direkte Programmierung der Sockets den Komponenten vorzuziehen. Oder man kann recht billig eine eigene Komponente um ein Socket erweitern.

5 Gedanken zu „Sockets mit WinAPI“

  1. Wo findet sich denn der Link, um die Programmbeispiele herunterzuladen?
    Ich suche jetzt schon eine Weile, finde aber nichts.

  2. Eine weitere – aus meiner Sicht sehr wichtige – Antwort auf die Frage, warum man die Sockets selbst über die Windows API programmieren sollte, wäre noch:

    Ich hatte vor ca. 10 Jahren einen „Chat“ über die Komponenten von Delphi programmiert. Wir haben hier in der Firma einen Linux-Server zu stehen. Da die Leute das lustig fanden, ist der Chat heute fester Bestandteil. Linux bedeutet aber insoweit Probleme, weil ich das Programm emulieren lassen muss. Dafür würde sich theoretisch wine anbieten.
    Der Haken ist aber, dass die Komponenten alle fest in der VCL verankert sind und man mit wine nicht weit kommt. Man braucht also eine virtuelle Maschine mit Windows, um den Server laufen zu lassen. Insoweit erhoffe ich mir, dieses Problem eventuell lösen zu können. Wenn es mir gelingt, mit dieser Anleitung eine eigene Klasse ganz ohne jede VCL erstellen zu können, dann kann ich den Server als Konsolen-Programm erstellen und (endlich) ohne den ganzen Overhead unter wine laufen lassen.

    Falls den Seitenadmin dieser Kommentar stört, kann er ihn gern wieder gelöscht werden. Aber auf der Suche nach Sockets ohne VCL, wäre dies als Fund bei Suchmaschinen schon vor langer Zeit sehr hilfreich für mich gewesen. Suchmaschinen finden aber immer nur den Text, der auf den Seiten tatsächlich irgendwo steht und wenn man nach „nonvcl“ im Zusammenhang mit Sockets unter Delphi sucht, sieht es dünn aus mit den Suchergebnissen.

  3. Hallo, ich kann leider auch deine Programmbeispiele als Datei nicht finden. Sind die nicht mehr verlinkt?

    Ansonsten gutes Tutorial 🙂

Kommentare sind geschlossen.