SE_BMMF/09kapitel/097 Client.ipynb
2022-05-27 14:56:12 +02:00

147 lines
3.6 KiB
Plaintext

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