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