You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

097 Client.ipynb 3.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. {
  2. "cells": [
  3. {
  4. "cell_type": "markdown",
  5. "metadata": {
  6. "pycharm": {
  7. "name": "#%% md\n"
  8. },
  9. "slideshow": {
  10. "slide_type": "slide"
  11. }
  12. },
  13. "source": [
  14. "# Software Entwicklung \n",
  15. "\n",
  16. "## Kapitel 9: IO\n",
  17. "\n",
  18. "### 9.5 Sockets\n",
  19. "\n",
  20. "#### 9.5.4 Client-Socket\n",
  21. "\n",
  22. "Da das *Client-Socket* den Server kontaktiert, benötigt es die Adresse und den\n",
  23. "Port des *Server-Sockets*. Mit <code>connect</code>\n",
  24. "wird die Verbindung aufgebaut, sofern an der Gegenstelle ein Server\n",
  25. "im Primitiv <code>accept</code> wartet.\n",
  26. "\n",
  27. "Danach folgen Primitive zum Senden\n",
  28. "<code>send</code> und Empfangen <code>receive</code> von Nachrichten\n",
  29. "in einer mit dem Server abgestimmten Reihenfolge.\n",
  30. "\n",
  31. "Abschließend ist die Verbindung mit <code>close</code> zu schließen. Bei Verwendung eines\n",
  32. "Kontextmanagers erfolgt dies automatisch."
  33. ]
  34. },
  35. {
  36. "cell_type": "markdown",
  37. "metadata": {
  38. "pycharm": {
  39. "name": "#%% md\n"
  40. },
  41. "slideshow": {
  42. "slide_type": "slide"
  43. }
  44. },
  45. "source": [
  46. "#### 9.5.5 Beispiel für einen Client"
  47. ]
  48. },
  49. {
  50. "cell_type": "code",
  51. "execution_count": null,
  52. "metadata": {
  53. "pycharm": {
  54. "name": "#%%\n"
  55. }
  56. },
  57. "outputs": [],
  58. "source": [
  59. "import socket\n",
  60. "\n",
  61. "with socket.socket() as client: # Generieren des Sockets\n",
  62. " host = socket.gethostname() # Server-IP\n",
  63. " port = 12345 # Server-Port\n",
  64. "\n",
  65. " client.connect((host, port)) # Connect\n",
  66. " bytes = client.recv(1024) # Receive\n",
  67. " print (bytes.decode('utf-8'))"
  68. ]
  69. },
  70. {
  71. "cell_type": "markdown",
  72. "metadata": {
  73. "slideshow": {
  74. "slide_type": "slide"
  75. }
  76. },
  77. "source": [
  78. "Möchte man ein Socket wie eine Datei behandeln, also statt <code>send</code> und\n",
  79. "<code>recv</code> lieber <code>write</code> und <code>read</code> verwenden, so kann\n",
  80. "mit <code>makefile</code> eine \"Hülle\" um das Socket gelegt werden, die die\n",
  81. "(meisten) Funktionen für Dateien anbietet und übersetzt."
  82. ]
  83. },
  84. {
  85. "cell_type": "code",
  86. "execution_count": null,
  87. "metadata": {
  88. "pycharm": {
  89. "name": "#%%\n"
  90. }
  91. },
  92. "outputs": [],
  93. "source": [
  94. "import socket\n",
  95. "\n",
  96. "with socket.socket() as client: # Generieren des Sockets\n",
  97. " host = socket.gethostname() # Server-IP\n",
  98. " port = 12345 # Server-Port\n",
  99. "\n",
  100. " client.connect((host, port)) # Connect\n",
  101. " with client.makefile(encoding=\"utf-8\") as file:\n",
  102. " text = file.readline()\n",
  103. " print (text)"
  104. ]
  105. },
  106. {
  107. "cell_type": "markdown",
  108. "metadata": {
  109. "pycharm": {
  110. "name": "#%% md\n"
  111. },
  112. "slideshow": {
  113. "slide_type": "slide"
  114. }
  115. },
  116. "source": [
  117. "Textnachrichten, die über ein Socket empfangen werden, müssen aus den übertragenen Bytes\n",
  118. "abgeleitet werden. Nutzt man die Dateischnittstelle, findet die Konvertierung dort statt.\n",
  119. "\n",
  120. " "
  121. ]
  122. }
  123. ],
  124. "metadata": {
  125. "celltoolbar": "Slideshow",
  126. "kernelspec": {
  127. "display_name": "Python 3 (ipykernel)",
  128. "language": "python",
  129. "name": "python3"
  130. },
  131. "language_info": {
  132. "codemirror_mode": {
  133. "name": "ipython",
  134. "version": 3
  135. },
  136. "file_extension": ".py",
  137. "mimetype": "text/x-python",
  138. "name": "python",
  139. "nbconvert_exporter": "python",
  140. "pygments_lexer": "ipython3",
  141. "version": "3.9.9"
  142. }
  143. },
  144. "nbformat": 4,
  145. "nbformat_minor": 1
  146. }