diff --git a/notebooks/seminar07.ipynb b/notebooks/seminar07.ipynb index 926000130ae263f22d768761ad48ca464eaf35b5..23f1bb211ff73eacfaa4ae3305788f3bc7ab07e1 100644 --- a/notebooks/seminar07.ipynb +++ b/notebooks/seminar07.ipynb @@ -16,13 +16,61 @@ "execution_count": null, "metadata": {}, "outputs": [], - "source": [] + "source": [ + "# Quellen: https://docs.python.org/3/howto/sockets.html und \n", + "# http://www.binarytides.com/python-socket-server-code-example/\n", + "\n", + "import socket\n", + "\n", + "# function for handling connections. This will be used to create threads\n", + "def client_thread(conn):\n", + " # sending message to connected client\n", + " conn.send(bytearray('Welcome to the server. Type something and hit enter\\n', \"utf-8\")) #send only takes string\n", + " \n", + " # infinite loop so that function do not terminate and thread do not end.\n", + " while True:\n", + " \n", + " # receiving from client\n", + " data = conn.recv(1024)\n", + " if not data: \n", + " break\n", + " # print on server side\n", + " print(data.decode(\"utf-8\"))\n", + " # echo to client side\n", + " reply = bytearray('OK ... ', \"utf-8\") + data\n", + " conn.sendall(reply)\n", + " \n", + " # came out of loop\n", + " conn.close()\n", + " \n", + "# create an INET, STREAMing socket\n", + "serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n", + "# bind the socket to a public host, and a port\n", + "# serversocket.bind((socket.gethostname(), 8080))\n", + "# use localhost instead \n", + "serversocket.bind((\"localhost\", 8080))\n", + "# become a server socket\n", + "serversocket.listen(5)\n", + "\n", + "\n", + "while True:\n", + " # accept connections from outside\n", + " (clientsocket, address) = serversocket.accept()\n", + " # now do something with the clientsocket\n", + " # in this case, we'll pretend this is a threaded server\n", + " ct = client_thread(clientsocket)\n", + " ct.run()\n", + "\n", + "serversocket.close()" + ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Und noch viele weitere schöne Beispiele: https://codegolf.stackexchange.com/questions/15860/" + "Dieser Code enthält das Grundgerüst, um eine auf TCP basierende Serveranwendung zu programmieren. Wenn Sie den Code starten und sich dann mit Hilfe von Telnet mit der Anwendung verbinden (`telnet localhost 8080`), werden alle Eingaben an Sie zurückgespiegelt (\"echo\") und hier in Jupyter ausgegeben. Das ist eine sehr einfache Testanwendung, die aus Sicherheitsgründen nur von Ihrem Rechner aus erreichbar ist. \n", + "\n", + "Falls Ihr Rechner keinen Paketfilter (\"Firewall\") laufen hat und Sie die Zeile mit `localhost` auskommentieren und stattdessen die mit `socket.gethostbyname()` aktivieren, dann ist die Anwendung ggf. auch von anderen Rechnern erreichbar und stellt ziemlich sicher eine Sicherheitslücke dar. Gehen Sie also vorsichtig mit dieser Option um. " ] }, { @@ -31,9 +79,9 @@ "source": [ "## 7 Iteration\n", "\n", - "Dieses Kapitel ist eine Übersetzung des [Kapitels 8 \"Iteration\"](http://greenteapress.com/thinkpython2/html/thinkpython2008.html) von Allen B. Downey. \n", + "Dieses Kapitel ist eine Übersetzung des [Kapitels 7 \"Iteration\"](http://greenteapress.com/thinkpython2/html/thinkpython2008.html) von Allen B. Downey. \n", "\n", - "Dieses Kapitel handelt von der Iteration - der Möglichkeit, eine Folge von Anweisungen zu wiederholen. Wir haben eine Art der Iteration unter Verwendung der Rekursion schon im [Abschnitt 5.8](seminar05.ipynb#5.8-Rekursion) gesehen und eine andere Art, mit Hilfe der `for`-Schleife in [Abschnitt 4.2](seminar04.ipynb#4.2-Einfache-Wiederholung). In diesem Kapitel lernen wir eine weitere Variante unter Verwendung der `while`-Anweisung kennen. Aber vorher schauen wir uns noch einmal die Zuweisung eines Wertes an eine Variable an. " + "Dieses Kapitel handelt von der Iteration - der Möglichkeit, eine Folge von Anweisungen zu wiederholen. Wir haben eine Art der Iteration unter Verwendung der Rekursion schon im [Abschnitt 5.8](seminar05.ipynb#5.8-Rekursion) gesehen und eine andere Art, mit Hilfe der `for`-Schleife, in [Abschnitt 4.2](seminar04.ipynb#4.2-Einfache-Wiederholung). In diesem Kapitel lernen wir eine weitere Variante unter Verwendung der `while`-Anweisung kennen. Aber vorher schauen wir uns noch einmal die Zuweisung eines Wertes an eine Variable an. " ] }, {