AmkSockets - AMK-spezifische Ethernet Socket Funktionen

die externe Kommunikationsbibliothek AmkSockets erlaubt eine anwenderprogrammierbare TCP/IP-Kommunikation und gliedert sich in:

 

BasicFunctions

Basisfunktionen

ConvertionFunctions

Konvertierungsfunktionen

SupportFunctions

Hilfsfunktionen

TCPSpecific

TCP spezifische Funktionen

 

Allgemeines zu dem Begriff 'Sockets'.

Einleitung in 'Sockets'

Ein Socket ist eine erstellte Schnittstellenanwendung. Die Schnittstelle wird von einem Betriebssystem gesteuert, mit dem Nachrichten gesendet und empfangen werden können.

Ein 'TCP' Socket bietet einen zuverlässigen bidirektionalen Kommunikationsweg von einem Prozess zu einem anderen. Verwende ein 'TCP' Socket wenn ein sicherer Transport von mehreren Daten benötigt wird.

Ein 'UDP' Socket bietet einen unzuverlässigeren bidirektionalen Kommunikationsweg von einem Prozess zu einem anderen. Das 'UDP' Socket wird zum senden von Broadcast Nachrichten (an mehrere Geräte) verwendet .

 

Funktionsabbildung eines Sockets:

Diese Abbildung zeigt, dass eine Socket zu Socket Verbindung, einer Leitung ähnelt in der Datenpakete von den zwei verbundenen Anwendungen platziert werden. Die Datenpakete werden automatisch transportiert und von der anderen Anwendung empfangen.

Die Datenpakete werden in der selben Reihenfolge empfangen, wie sie in der Leitung platziert werden. Jedes Datenpaket wird vom Empfänger quittiert.

Die Sockets werden durch eine IP-Adresse und einem Port adressiert. In einem Netzwerk hat jeder Host eine einzigartige IP-Adresse. Die IP-Adresse besteht aus 4 Bytes und wird folgendermaßen geschrieben: z.B. 192.168.0.1

Client-/Server-Prinzip

Für gewöhnlich wird von einem Client die Verbindung zum Server aufgerufen und wird dann mit einem anderen Client verbunden. Die Unterschiede des Weges kommen durch das Verhalten während dem Verbindungsprozess zustande. Die 2 Verhaltensweisen werden in dem weiterführenden Text aufgezeigt.

In der folgenden Beschreibung wird angenommen, dass nur nicht-sperrende Sockets verwendet werden. Ein sperrendes Socket (Standardmodus eines neu erstellten Sockets) veranlasst die Sperrung der ausgeführten Funktion (z.b. nicht zurück), bis diese Erfolgt oder ein Fehler eintritt. Diese Funktion muss sehr gewissenhaft verwendet werden, da sonst die Funktion für längere Zeit gesperrt wird. Die Watchdog Zeit kann dabei überschritten werden.

Die Sperrung eines Sockets kann durch die Verwendung der Funktion 'FdiSockIoCtl' geändert werden. Die Funktion wird in diesem Dokument beschrieben.

Zur Statusbestimmung des nicht-sperrenden Sockets kann die Funktion 'FboSockSelect' in Kombination mit 'FboSockIsRead', 'FboSockIsWrite' und 'FboSockIsConnect' verwendet werden.

 

Server:

  1. Erstelle ein spezielles Socket, welches die Anforderungen der eingehenden Verbindungen empfängt.
  2. (Optional) Setze das Socket in Sperrmodus und setze auch die anderen Initialisierungen.
  3. Verbinde das Socket mit der IP-Adresse und dem spezifischen Port (Well-Known Port). Für mehrere bekannte Dienste sind diese festgelegt und werden von jeder Portnummer verwendet (23 ist der Standard Port von TELNET). Bei Serverapplikationen wird empfohlen eine Nummer über 1500 zu verwenden, da dabei eine geringere Möglichkeit besteht, dass die gewählte Nummer bereits vergeben ist. Um in diesem Fall Konflikte zu vermeiden muss der Port gewechselt werden. Werden in einer Maschine verschiedene Anwendungen zum Empfang der Daten genutzt, dann muss bestimmt werden für welche Anwendung der Port verwendet wird. Der Port teilt eine IP-Adresse in viele logische Subadressen auf.
  4. Rufe die Funktion für das Socket auf, welche die Ursache für die eingehende Warteschleife des Betriebssystems hat.
     Die Initialisierung kann zu einem bestimmten Punkt zu jeder Zeit ausgewählt werden. Allerdings muss zuvor die Verbindung des Clients geprüft werden. Andernfalls wird versucht die Verbindung wieder aufzubauen.
  5. Wenn das Socket zum Empfang einer Verbindung aufgefordert wird, dann kann die Anwendung die aufgerufene Funktion und Verbindung akzeptieren. Diese kann abgelehnt werden oder gibt das neu verbundene Socket komplett zurück. Falls es mehrere Verbindungsanfragen gibt, wird nach diesem Ablauf die Funktion erneut aufgerufen.
  6. Die Verbindung ist aufgebaut. Daten können gesendet und empfangen werden.
  7. Wenn die Verbindung nicht mehr benötigt wird, dann müssen die Sockets durch die Funktion geschlossen werden um die Ressourcen wieder freizugeben.
  8. Wenn die Serverapplikation keine Verbindungen mehr zulässt, dann muss das Empfänger Socket geschlossen werden.

Client:

  1. Erstelle das Socket, welches verbunden wird.
  2. (Optional) Setze das Socket in Sperrmodus und setze auch die anderen Initialisierungen.
  3. Rufe die verbundene Funktion auf, welche die Zielparameter der IP-Adresse von dem entsprechenden Port übernimmt.Es wird ein 3-Way Handshake mit dem Server initiiert. Clients müssen nicht als erstes hinzugefügt werden, weil die Zuordnung der lokalen Endadresse (TCP Port und IP Adresse) durch das Betriebssystem erledigt wird.
  4. Die Verbindung ist aufgebaut. Das Senden und Empfangen von Daten ist möglich. Falls das nicht möglich ist, muss das Socket geschlossen werden und die Reihenfolge ab Schritt 1 zu einem späteren Zeitpunkt wiederholt werden.
  5. Wenn die Verbindung nicht mehr benötigt wird, dann muss das Socket geschlossen werden um die Ressourcen wieder freizugeben.