123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- {
- "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
- }
|