Browse Source

teil13

develop
Raspithek 2 years ago
parent
commit
601b5de46d
  1. BIN
      teil13/__pycache__/network.cpython-39.pyc
  2. 15
      teil13/fib.py
  3. 60
      teil13/fibclient.py
  4. 92
      teil13/fibserver.py
  5. 11
      teil13/get_requests.py
  6. 20
      teil13/get_urllib.py
  7. 554
      teil13/index.html
  8. 1
      teil13/network/__init__.py
  9. BIN
      teil13/network/__pycache__/__init__.cpython-39.pyc
  10. BIN
      teil13/network/__pycache__/const.cpython-39.pyc
  11. 10
      teil13/network/code.py
  12. 12
      teil13/network/const.py
  13. 3
      teil13/substring.py
  14. 5
      teil13/test.py

BIN
teil13/__pycache__/network.cpython-39.pyc

Binary file not shown.

15
teil13/fib.py

@ -0,0 +1,15 @@
# fib.py
import sys
# berechnet rekursiv die Fibonaccizahl n.
def fib(n):
# Rekursionsbedingung
if n in [0,1]:
return 1
else:
# Rekursionsaufruf
return fib(n-1) + fib(n-2)
element = int(sys.argv[1])
print(fib(element))

60
teil13/fibclient.py

@ -0,0 +1,60 @@
# encoding: utf-8
# fibclient.py
import socket
import time
from network.const import __ADDRESS__
DISCONNECT_MESSAGE = "!DISCONNECT"
# Verbindung herstellen
def connect():
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(__ADDRESS__)
return client
# msg senden
def send(client, msg):
message = msg.encode('utf-8')
client.send(message)
# Daten empfangen
def receive(conn):
msg = conn.recv(64).decode('utf-8')
return msg
# Hauptmethode
def start():
# String von Console lesen
answer = input('Verbindung aufbauen? (ja/nein)? ')
if answer.lower() != 'ja':
return
# Verbindung aufbauen
connection = connect()
while True:
msg = input("Nachricht (q für quit): ")
# Bei Eingabe == 'q' Schleife beenden.
if msg == 'q':
break
# Sonst eingegeben String an Server senden.
send(connection, msg)
# und auf Ergebnis warten.
result = receive(connection)
print(f'result={result}')
# Fibonaccizahl isolieren.
fib = int(result.split('[')[0])
print(f'Fibonnaci-Zahl ist {fib}')
print(f'[RESULT] {result}')
# zum Beenden die Nachricht 'quit an den Server senden
send(connection, 'quit')
time.sleep(1)
print('Disconnected')
# Hauptprogramm: Client starten
if __name__ == '__main__':
start()

92
teil13/fibserver.py

@ -0,0 +1,92 @@
#! /usr/bin/python3
import socket
import threading
from network.const import __ADDRESS__
# Server-Socket aufbauen
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#Socket an unsere Server-Adresse binden
server.bind(__ADDRESS__)
# Set mit den verbundenen Clients
clients = set()
# Locks für den Zugriff auf das Set
clients_lock = threading.Lock()
# Unsere Arbeitsmethode: rekursive Fibonacci-Reihe
def fib(n):
# Rekursionsbedingung
if n in [0,1]:
return 1
else:
# Rekursionsaufruf
return fib(n-1) + fib(n-2)
#bearbeitet eine eingehende Connection annehmen, pro Client ein seperater Thread
def handle_connection(conn,addr):
print(f"[NEW CONNECTION] {addr} Connected")
try:
connected = True
while connected:
msg = conn.recv(64).decode('utf-8')
print(f'[RECEIVED] {msg}')
if not msg:
break
else:
if msg.startswith('fib:'):
element = int(msg[4:])
fibo = fib(element)
print(f'[SENDING] fib({element})={fibo}')
# Ergebnis an Client senden.
with clients_lock:
for c in clients:
c.sendall(f'{fibo}'.encode('utf-8'))
else:
pass
if msg == 'quit':
print('[DISCONNECT]')
connected = False
# with clients_lock:
# for c in clients:
# c.sendall(f"[{addr}] {msg}".encode('utf-8'))
finally:
# Clientverbindung abbauen und aus Set entfernen.
with clients_lock:
clients.remove(conn)
conn.close()
# Start des Servers
def start():
print('[SERVER STARTED]!')
# Horchen nach eingehender Verbindung
server.listen()
while True:
# Neue Verbindung annehmen
conn, addr = server.accept()
# Neuen Client in Set aufnehmen
with clients_lock:
print(f'[ADDING CONNECTION] {conn}')
clients.add(conn)
#Thread zur Bearbeitung des Requests starten.
thread = threading.Thread(target=handle_connection, args=(conn, addr))
thread.start()
#Hauptprogramm: Serverstart einleiten
if __name__ == '__main__':
start()

11
teil13/get_requests.py

@ -0,0 +1,11 @@
import requests
url = requests.get('https://raspithek.de')
data = url.text
print(data)

20
teil13/get_urllib.py

@ -0,0 +1,20 @@
# encoding: UTF-8
import urllib.request
# URL öffnen und Daten anfordern. Ohne spezielle Dateiangabe
# liefert der Webserver immer die index.html zurück.
fp = urllib.request.urlopen('https://raspithek.de')
# Daten auslesen
data = fp.read()
print(type(data))
# Die Daten sin vom Datentyp Bytes und müssen daher erst
# zum UTF-8 String umkodiert werden.
str = data.decode('utf8')
fp.close()
print(str)

554
teil13/index.html

File diff suppressed because one or more lines are too long

1
teil13/network/__init__.py

@ -0,0 +1 @@

BIN
teil13/network/__pycache__/__init__.cpython-39.pyc

Binary file not shown.

BIN
teil13/network/__pycache__/const.cpython-39.pyc

Binary file not shown.

10
teil13/network/code.py

@ -0,0 +1,10 @@
def receive(conn):
msg = conn.recv(64).decode('utf-8')
return msg
def send(client, msg):
message = msg.encode('utf-8')
client.send(message)

12
teil13/network/const.py

@ -0,0 +1,12 @@
#network/const.py
import socket
# TCP Port
__PORT__ = 6554
#Server-IP
__SERVER__ = socket.gethostbyname(socket.gethostname())
# Server-Adresse (IP,Port)
__ADDRESS__ = (__SERVER__,__PORT__)

3
teil13/substring.py

@ -0,0 +1,3 @@
print('fib:58'[4:])

5
teil13/test.py

@ -0,0 +1,5 @@
from network.const import __SERVER__
from network.const import __ADDRESS__
print(f'Server:{__SERVER__}')
print(f'Address:{__ADDRESS__}')
Loading…
Cancel
Save