05.11.2013 Aufrufe

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

156 4 Gr<strong>und</strong>lagen der Socket-Programmierung<br />

42–45<br />

Das Fehlverhalten läßt sich darauf zurückführen, daß das Telnet-Programm<br />

bei der Datenübertragung jede Eingabezeile <strong>mit</strong> der Zeichenkombination \r\n<br />

(Carriage-Return plus Linefeed) abschließt. Unser Programm erwartet dagegen<br />

lediglich ein einfaches \n am Ende der Eingabe.<br />

Anstatt jetzt die vorgegebene Lösung in Zeile 16 um das fehlende \r zu<br />

ergänzen, haben wir in Beispiel 4.1 einen allgemeineren Ansatz gewählt: Beginnend<br />

<strong>mit</strong> dem letzten Zeichen der eingelesenen Zeichenkette entfernen wir<br />

alle Carriage-Return- <strong>und</strong> Linefeed-Zeichen. In Zeile 16 haben wir darüber<br />

hinaus bei der Antwort das abschließende \n entfernt. Der konsequente Verzicht<br />

auf die Zeilentrenner erhöht zudem die Portabilität der Applikation: Die<br />

neue Version des Quizprogramms kommt durch diese Ergänzung jetzt sowohl<br />

<strong>mit</strong> Terminaleingaben als auch <strong>mit</strong> Netzwerkverbindungen zurecht.<br />

Neben diesen beiden kleinen, aber entscheidenden Anpassungen wurde in Beispiel<br />

4.1 noch auf die Behandlung des terminalgenerierten SIGINT-Signals verzichtet.<br />

Ansonsten unterscheidet sich das Beispielprogramm nicht von der Ursprungsversion<br />

aus Beispiel 2.15. Die diskutierten Probleme haben hoffentlich<br />

gezeigt, wie schnell man im Umfeld der Netzwerkprogrammierung <strong>mit</strong> den<br />

Ein- <strong>und</strong> Ausgabefunktionen aus der Standard-Bibliothek von ANSI/ISO C<br />

ins Abseits geraten kann.<br />

Zusammenfassend halten wir dennoch fest, daß der Internet Dæmon inetd<br />

eine einfache Möglichkeit liefert, Programme netzwerkfähig zu machen <strong>und</strong><br />

so<strong>mit</strong> Dienste über das Netzwerk anzubieten. Er startet dazu für eingehende<br />

Netzwerkverbindungen die zugehörigen Programme. Die gestarteten Prozesse<br />

finden ihre Ein- <strong>und</strong> Ausgabekanäle <strong>mit</strong> der Netzwerkverbindung verknüpft.<br />

Über stdin können Daten vom Netzwerk empfangen, <strong>und</strong> über stdout (<strong>und</strong><br />

stderr)können Daten an die Gegenstelle geschickt werden. Der Dæmon übernimmt<br />

da<strong>mit</strong> für das Anwendungsprogramm<br />

1. den Verbindungsaufbau über das Netzwerk,<br />

2. die Verknüpfung der Datenströme für die Ein- <strong>und</strong> Ausgabe (inklusive<br />

Fehlerausgabe) <strong>mit</strong> der Netzwerkverbindung sowie<br />

3. den Start einer neuen, ggf. parallelen Instanz des Netzwerkdiensts über<br />

fork() <strong>und</strong> exec().<br />

In den folgenden Abschnitten werden wir das Heft Zug um Zug selbst in die<br />

Hand nehmen <strong>und</strong> die Funktionalität des inetd in unsere eigenen Programme<br />

übertragen.<br />

4.2 IP-Namen <strong>und</strong> IP-Adressen<br />

IP-Namen sind heutzutage sogar absoluten Computer-Laien ein Begriff. Kaum<br />

ein Fernsehsender, eine Zeitung oder ein Sportverband kommt heute noch

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!