{"id":3644,"date":"2012-02-23T06:38:02","date_gmt":"2012-02-23T05:38:02","guid":{"rendered":"https:\/\/www.herr-rau.de\/wordpress\/?p=3644"},"modified":"2012-02-24T08:25:41","modified_gmt":"2012-02-24T07:25:41","slug":"na-wie-gehts-uns-denn-so-clients-and-servers","status":"publish","type":"post","link":"https:\/\/www.herr-rau.de\/wordpress\/2012\/02\/na-wie-gehts-uns-denn-so-clients-and-servers.htm","title":{"rendered":"Na, wie geht&#8217;s uns denn so? (Clients and Servers.)"},"content":{"rendered":"<div style='text-align:right;'><small>(<a href='https:\/\/www.herr-rau.de\/wordpress\/2012\/02\/na-wie-gehts-uns-denn-so-clients-and-servers.htm#comments'>3 Kommentare.<\/a>)<\/small> <\/div><p>Ingo <a href=\"http:\/\/blog.ingo-bartling.de\/2012\/02\/16\/unsinniger-donnerstag\/\">hat bei sich den Moodbear vorgestellt<\/a>, mit dem man nonverbal seine Stimmung nach au\u00dfen signalisieren kann, falls Mimik und K\u00f6rperhaltung dazu nicht ausreichen. So etwas \u00e4hnliches hat ein unterbesch\u00e4ftigter Informatik-Oberstufensch\u00fcler (leider nicht an meiner Schule) entworfen. Es handelt sich dabei um zwei Python-Skripte. Eines davon ist der <em>Client<\/em>: der schickt Anfragen oder Nachrichten an einen <em>Server<\/em>, der diese dann der Reihe nach abarbeitet und eventuell Informationen zur\u00fcckmeldet. In der Regel kommen auf einen Server viele Clients, die unabh\u00e4ngig von einander mit dem Server kommunizieren.<\/p>\n<p>Im Computerraum startet man auf jedem Sch\u00fclerrechner den Client. Dann taucht zum Beispiel rechts unten am Bildschirm dieses Fensterchen auf:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/python_client.png\" alt=\"\" title=\"python_client\" width=\"483\" height=\"101\" class=\"alignnone size-full wp-image-3645\" srcset=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/python_client.png 483w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/python_client-150x31.png 150w\" sizes=\"auto, (max-width: 483px) 100vw, 483px\" \/><\/p>\n<p>Text und Farbe und Anzahl der Buttons und deren Beschriftung kann man nat\u00fcrlich ver\u00e4ndern. Der Sch\u00fcler dr\u00fcckt, sagen wir, den gr\u00fcnen Knopf, wenn es ihm gut geht, den gelben, wenn er sich langweilt und den roten, wenn er sich \u00e4rgert.<\/p>\n<p>Auf dem Rechner des Lehrers startet man den Server. Das sieht dann so aus:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/python_server.png\" alt=\"\" title=\"python_server\" width=\"487\" height=\"126\" class=\"alignnone size-full wp-image-3646\" srcset=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/python_server.png 487w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/python_server-150x38.png 150w\" sizes=\"auto, (max-width: 487px) 100vw, 487px\" \/><\/p>\n<p>Man sieht die zuvor gestellte Frage und die Gesamtzahl der Antworten, also wie viele Sch\u00fcler sich f\u00fcr welchen Knopf entschieden haben. Das kann man f\u00fcr Abstimmungen benutzen oder daf\u00fcr, welche Stimmung gerade in der Klasse herrscht, oder um zu sehen, wie viele Sch\u00fcler gerade an welcher Aufgabe arbeiten oder mit welcher Teilaufgabe bereits fertig sind. Wenn sich Sch\u00fcler umentscheiden, werden die neuen Zahlen sofort beim Lehrer angezeigt.<\/p>\n<p>(Ist in Python geschrieben, das bei uns im Computerraum installiert ist. K\u00f6nnte man so \u00e4hnlich auch in Java machen.) <\/p>\n<p>&#8212; Diese Client-Server-Struktur ist Stoff in der Q12 in Informatik. Man findet sie zum Beispiel bei Anfragen an einen Webserver, wo ein Client (ein Webbrowser) \u00fcber ein bestimmtes Protokoll (etwa http oder https) Anfragen an einen Webserver schickt, der daraufhin damit reagiert, dass er den HTML-Text der angeforderten Seite zur\u00fcckschickt.<\/p>\n<p>Dazu m\u00fcssen sich Client und Server <strong>erstens<\/strong> \u00fcber eine gemeinsame Sprache einig sein, also darauf, welche Art Anfrage des Clients welche Reaktion des Servers nach sich ziehen soll. Diese Sprachen hei\u00dfen Protokolle. Nach dem <em>hypertext transfer protocol<\/em> (http) sieht eine Anfrage an den Server zum Beispiel so aus:<\/p>\n<p><code>GET \/wordpress\/ HTTP\/1.1<br \/>\nHost: www.herr-rau.de<br \/>\n<em>&lt;Leerzeile&gt;<\/em><\/code><\/p>\n<p>Da hilft es nichts, wenn man stattdessen sendet &#8222;Dear www.herr-rau.de, please send me: \/wordpress\/&#8220;. Wenn man die falsche Sprache &#8211; das falsche Protokoll &#8211; benutzt, versteht der Server nur Bahnhof. Als Benutzer muss man diese Zeilen eigentlich nie eingeben, die Verbindungsaufnahme und das Versenden der http-Nachricht \u00fcbernimmt der Browser f\u00fcr einen. Man kann aber, wenn man m\u00f6chte, auch in einem Terminal zuerst eine Telnet-Verbindung zum Webserver aufbauen und dann von Hand die http-Anfragen stellen.<\/p>\n<p>&#8212; Auch das Programm von oben benutzt ein Protokoll. Wenn der Client dem Server eine Nachricht schickt, muss das in einer bestimmten Form geschehen, damit der Server wei\u00df, was damit gemeint ist. Nur ist dieses Protokoll halt nicht standardisiert, sondern vom Softwareentwickler f\u00fcr seinen Zweck angelegt.<\/p>\n<p><strong>Zweitens<\/strong> muss der Client die Adresse des Servers kennen. Die besteht aus der IP-Adresse des Rechners, auf dem das Serverprogramm l\u00e4uft. Da man die IP-Adresse in der Regel nicht auswendig wei\u00df, gibt man stattdessen die Web-Adresse des Rechners an, also www.herr-rau.de, und dann wird automatisch in einem Internet-Telefonbuch (<a href=\"http:\/\/de.wikipedia.org\/wiki\/Domain_Name_System\">DNS<\/a>) gesucht, welche IP-Adresse zu diesem Namen geh\u00f6rt. (Siehe: <a href=\"https:\/\/www.herr-rau.de\/wordpress\/2009\/10\/die-maus-erklaert-das-internet.htm\">Die Maus erkl\u00e4rt das Internet<\/a>.)<br \/>\nSo ein Rechner hat in der Regel mehrere Kan\u00e4le, auf denen er nach Anfragen der verschiedenene Art lauscht. Diese Kan\u00e4le hei\u00dfen <em>ports<\/em>, einige davon sind standardisiert. An Port 80 sendet man zum Beispiel standardm\u00e4\u00dfig http-Anfragen, und auf Port 80 lauscht ein Webserver nach eben diesen Anfragen, um sie zu beantworten. Kommen mehr Anfragen, als der Server nach und nach beantworten kann, dann ist der \u00fcberlastet und kann nicht mehr reagieren. Als Angriff auf einen Server hei\u00dft das dann DoS-Angriff &#8211; denial of service, wenn der Server mit so vielen Anfragen bombardiert wird, dass er kapituliert. <\/p>\n<p>Damit Client A eine http-Anfrage an Server B stellen kann, muss vorher eine Verbindung zwischen Rechner A und Rechner B hergestellt worden sein. Diese Verbindung kann man sich vorstellen wie ein langes Kabel, das &#8211; zugegeben, vermittelt durch viele Zwischenstationen &#8211; zwischen A und B gespannt ist. Diese Verbindung wird nach dem Protokoll TCP (transmission control protocol) aufgebaut.<br \/>\nEs gibt noch ein weiteres Protokoll, mit dem Client A mit Server B in Kontakt treten kann, das Protokoll UDP. Dieses Protokoll ist verbindunglos und eher einem Brief vergleichbar, den man aufgibt und von dem man hofft, dass er schon ankommen wird. Tut er auch meist, aber bei UDP kann es sein, das zwischendrin ein paar Teile verlorengehen, anders als bei TCP. Bei Echtzeit-Video\u00fcbertragungen macht es vielleicht weniger aus, wenn zwischendurch ein paar Bilder fehlen, als dass der Video h\u00e4ngt, weil man auf den n\u00e4chsten Teil wartet.<br \/>\nAnfragen mit http sind \u00fcbrigens nur m\u00f6glich, wenn vorher eine Verbindung hergestellt wurde, also \u00fcber TCP. Andere Anfragen k\u00f6nnen auch \u00fcber UDP laufen.<\/p>\n<p>&#8212; Auch die Clients des Programms von oben brauchen die IP-Adresse des Servers. Allerdings geschieht hier die Kommunikation diesseits des Routers, der all diese Rechner mit dem Internet verbindet. Das sind dann lokale IP-Adressen, die nur auf dieser Seite des Routers gelten, und die vom Router vergeben werden &#8211; entweder wechselnd oder fest. Die Welt drau\u00dfen kennt nur die von der Telekommunikationsgesellschaft zugewiesene und h\u00e4ufig wechselnde IP-Adresse des Routers; innerhalb des Router-Heimnetzes hat dann jeder Rechner seine eigene lokale IP-Adresse, meist 192.168.0.xxx oder 192.168.2.xxx oder so \u00e4hnlich.<br \/>\nDiese LAN-interne IP-Adresse gibt man bei dem Programm in eine Konfigurationsdatei ein, ebenso den gew\u00fcnschten Port. Das sollte irgendeiner sein, der nicht standardm\u00e4\u00dfig einem bestimmten Protokoll zugewiesen ist. <\/p>\n<p>Und leider, leider funktioniert das Programm bei uns an der Schule nicht. Genauer: die Rechner k\u00f6nnen keinen Kontakt zwischen einander herstellen, obwohl die IP-Adresse korrekt ist und ich einen geeigneten Port eingegeben habe. Das habe ich in der Q12 mit einem selbst geschriebenen Java-Chatserver auch schon gemerkt. Weder TCP noch UDP funktionieren; ich vermute, dass der Router einfach keinen Nachrichtenaustausch zwischen den einzelnen Rechnern erlaubt, sondern nur zwischen dem Rechner und dem gemeinsamen Fileserver. Der Systembetreuer wei\u00df schon Bescheid, er will sich darum k\u00fcmmern. (Ich halte es f\u00fcr kein ernst zu nehmendes Problem, dass findige Sch\u00fcler dann ihre eigene Client-Server-Struktur aufbauen und mittels kleiner Java-Programme miteinander w\u00e4hrend des Unterrichts Verbindung aufnehmen k\u00f6nnten.)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>(3 Kommentare.) Ingo hat bei sich den Moodbear vorgestellt, mit dem man nonverbal seine Stimmung nach au\u00dfen signalisieren kann, falls Mimik und K\u00f6rperhaltung dazu nicht ausreichen. So etwas \u00e4hnliches hat ein unterbesch\u00e4ftigter Informatik-Oberstufensch\u00fcler (leider nicht an meiner Schule) entworfen. Es handelt sich dabei um zwei Python-Skripte. Eines davon ist der Client: der schickt Anfragen oder [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":3645,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[25],"tags":[227],"class_list":["post-3644","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-informatik","tag-informatik"],"jetpack_featured_media_url":"https:\/\/www.herr-rau.de\/wordpress\/archiv\/python_client.png","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts\/3644","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/comments?post=3644"}],"version-history":[{"count":0,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts\/3644\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/media\/3645"}],"wp:attachment":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/media?parent=3644"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/categories?post=3644"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/tags?post=3644"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}