{ "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 connect\n", "wird die Verbindung aufgebaut, sofern an der Gegenstelle ein Server\n", "im Primitiv accept wartet.\n", "\n", "Danach folgen Primitive zum Senden\n", "send und Empfangen receive von Nachrichten\n", "in einer mit dem Server abgestimmten Reihenfolge.\n", "\n", "Abschließend ist die Verbindung mit close 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 send und\n", "recv lieber write und read verwenden, so kann\n", "mit makefile 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 }