Buchempfehlung
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Umfassend, aber leicht verständlich führt dieses Buch in die Programmierung von ATMEL AVR Mikrocontrollern ein. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Tutorial

Netzwerkprogrammierung mit TSNE_V3

von MitgliedThePuppetMasterSeite 2 von 8

Zuerst einmal möchte ich darauf hinweisen, dass TSNE im Grunde keine wirkliche Library (Bibliothek), sondern eher eine Include-Datei bzw. ein Erweiterungsmodul ist.
Der Vorteil dieser Strategie ist die vereinfachte Handhabung bei der Weitergabe von Programmen. Durch die Verwendung eines Moduls wird der Quellcode von TSNE direkt in das Programm kompiliert. Das macht das Programm selbst zwar größer, jedoch ist die Weitergabe einer zusätzlichen Datei (DLL, SO) dadurch nicht nötig.
Neben der erhöhten Dateigröße der ausführbaren Datei besteht ein weiterer Nachteil darin, dass ein Austausch von TSNE, z.B. bei auftretenden Fehlern, nur mit dem gesamten Programm möglich ist. Taucht ein Bug in TSNE auf, so muss die Include-Datei angepasst oder neu bezogen werden, woraufhin das gesamte Programm neu compiliert werden muss, damit die Änderungen an TSNE einfließen können. Wäre die TSNE eine externe Bibliothek, würde es genügen, die externe Bibliotheksdatei (etwa TSNE.dll) auszuwechseln.

Hier hat gewiss die Verwendung von TSNE als DLL bzw. als Library mehr Sinn, jedoch nur für Programmentwickler, die ihre Anwendungen weitergeben und nicht für den Endbenutzer.

Als nächster wichtiger Punkt ist zu erwähnen, dass TSNE nicht mehr als eine Kapselung von Socket-Funktionen ist. Viele Programme, die auf TCP- oder UDP-Verbindungen basieren bzw. solche nutzen, arbeiten größtenteils auf dieselbe Art. Spezielle Varianten sind mit TSNE zwar möglich, jedoch aktuell nicht implementiert und in den meisten Fällen auch nicht nötig.

Unter "Kapselung" ist hier zu verstehen, dass Betriebssystem-spezifische Befehle zum Aufbau einer Netzwerk-Verbindung zu einfachen Funktionsaufrufen verpackt wurden, die plattformübergreifend genutzt werden können.
Um z.B. eine Verbindung mit einem Server herstellen zu können, müsste man zuerst einmal vom Betriebssystem ein sogenanntes "Socket" erfragen bzw. erzeugen, anschließend diesem Socket einige Parameter zuweisen, das Socket eine Verbindung herstellen lassen und anschließend dieses dauerhaft auf Aktivität hin überwachen.
All diese teilweise recht komplexen Prozeduren werden von TSNE in einfache Kommandos gekapselt. Im oben genanntem Beispiel des Verbindungsaufbaus zu einem Server wurde das Ganze in "TSNE_Create_Client" zusammengefasst.

TSNE erhält beim Erzeugen eines Sockets eine sogenannte Socketnummer. Diese Nummer ist auf dem gesamten Betriebssystem nur einmalig vorhanden (eindeutig) und identifiziert das erzeugte Socket. Die Socketnummern werden von TSNE verwaltet. Um zu verhindern, dass TSNE mit fehlerhaften Nummern arbeitet (also der Programmierer fehlerhafte Nummern an TSNE übergeben kann), erzeugt TSNE eigene IDs, die sogenannten TSNEIDs. Eine TSNEID wird zur Identifizierung einer Verbindung verwendet.
Erzeugt TSNE nun ein Socket, wird dessen Socketnummer mit einigen zusätzlichen Informationen (das Socket selbst und eine fortlaufende TSNEID) in der Datenbank von TSNE abgelegt. Die angelegte TSNEID wird anschließend als Rückgabe des Funktionsaufrufs von z.B. TSNE_Create_Client an die aufrufende Instanz übermittelt. Mit dieser TSNEID kann der Programmierer nun auf Funktionen von TSNE zugreifen, welche zur Übermittlung von Daten dienen oder den Status eines Sockets steuern.

Man kann einfach gesagt die TSNEIDs mit den Nummern von BefehlsreferenzeintragFreeFile (für das Öffnen einer Datei) vergleichen. Der einzige Unterschied ist, dass TSNE eine frei gewordene Nummer erst dann neu vergibt, wenn 4294967296 weitere Nummern erzeugt wurden.
TSNE verwendet für die TSNEID eine BefehlsreferenzeintragUInteger-Variable, die bei jedem Aufruf eines TSNE_Create_xxx um +1 erhöht wird. Erreicht diese Variable ihr Ende, beginnen die Nummern von vorn.
Der Grund dieses Prinzips ist auf ein Problem zurückzuführen, das beim Zerstören (TSNE_Disconnect) eines Sockets auftritt und unter Umständen noch vorhanden sein könnte. Hierdurch kann es zu Problemen bei der Handhabung des Sockets kommen.

Ein Socket selbst ist ein recht komplexes Konstrukt, das viele Operationen ausführt, bevor es erzeugt oder wirklich komplett beendet wurde. Dieser ganze Verwaltungsaufwand wird durch TSNE durchgeführt und erspart somit dem Benutzer einiges an Programmierarbeit.

Jedes TSNE_Create_xxx erzeugt ein Socket, das vom Aufbau her immer gleich ist. Der einzige Unterschied liegt in der Verwendung. Diese wird - durch Parameter angegeben - dem Socket mitgeteilt. Außerdem kann ein Socket nicht immer auf dieselbe Art gesteuert werden, sondern muss entsprechend seiner Aufgabe einer angepassten Verwaltung unterliegen. Auch dies übernimmt TSNE vollständig.

TSNE ist zwar relativ klein, beherbergt jedoch viele verwaltungstechnische Funktionen und Routinen.





 

Gehe zu Seite Gehe zu Seite  1  2  3  4  5  6  7  8  
Zusätzliche Informationen und Funktionen
  • Das Tutorial wurde am 19.07.2009 von MitgliedThePuppetMaster angelegt.
  • Die aktuellste Version wurde am 15.10.2018 von Mitgliedgrindstone gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen