147 lines
3.6 KiB
Plaintext
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
|
|
}
|