{ "cells": [ { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "slideshow": { "slide_type": "slide" } }, "source": [ "# Software Entwicklung \n", "\n", "## Kapitel 9: IO\n", "\n", "### 9.5 Sockets\n", "\n", "#### 9.5.4 Client-Socket\n", "\n", "Da das *Client-Socket* den Server kontaktiert, benötigt es die Adresse und den\n", "Port des *Server-Sockets*. Mit <code>connect</code>\n", "wird die Verbindung aufgebaut, sofern an der Gegenstelle ein Server\n", "im Primitiv <code>accept</code> wartet.\n", "\n", "Danach folgen Primitive zum Senden\n", "<code>send</code> und Empfangen <code>receive</code> von Nachrichten\n", "in einer mit dem Server abgestimmten Reihenfolge.\n", "\n", "Abschließend ist die Verbindung mit <code>close</code> zu schließen. Bei Verwendung eines\n", "Kontextmanagers erfolgt dies automatisch." ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "slideshow": { "slide_type": "slide" } }, "source": [ "#### 9.5.5 Beispiel für einen Client" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "import socket\n", "\n", "with socket.socket() as client: # Generieren des Sockets\n", " host = socket.gethostname() # Server-IP\n", " port = 12345 # Server-Port\n", "\n", " client.connect((host, port)) # Connect\n", " bytes = client.recv(1024) # Receive\n", " print (bytes.decode('utf-8'))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Möchte man ein Socket wie eine Datei behandeln, also statt <code>send</code> und\n", "<code>recv</code> lieber <code>write</code> und <code>read</code> verwenden, so kann\n", "mit <code>makefile</code> eine \"Hülle\" um das Socket gelegt werden, die die\n", "(meisten) Funktionen für Dateien anbietet und übersetzt." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "import socket\n", "\n", "with socket.socket() as client: # Generieren des Sockets\n", " host = socket.gethostname() # Server-IP\n", " port = 12345 # Server-Port\n", "\n", " client.connect((host, port)) # Connect\n", " with client.makefile(encoding=\"utf-8\") as file:\n", " text = file.readline()\n", " print (text)" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "slideshow": { "slide_type": "slide" } }, "source": [ "Textnachrichten, die über ein Socket empfangen werden, müssen aus den übertragenen Bytes\n", "abgeleitet werden. Nutzt man die Dateischnittstelle, findet die Konvertierung dort statt.\n", "\n", " " ] } ], "metadata": { "celltoolbar": "Slideshow", "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.9" } }, "nbformat": 4, "nbformat_minor": 1 }