# Liest Daten, bis der Sender anzeigt, dass er keine weiteren Daten schicken wird
# oder bis die Verbindung vom Sender geschlossen wird.
# Parameter: Socket-Objekt komm_s, von dem gelesen werden soll
# Rückgabewert: gelesene Daten als String (Kodierung utf-8)
def empfangeStr(komm_s):
    weiter = True
    datenBytes = bytes()

    endByte = bytes([0])

    while weiter:
        chunk = komm_s.recv(1)
        if chunk == endByte or chunk == bytes([]):
            weiter = False
        else:
            datenBytes = datenBytes + chunk

    datenStr = str(datenBytes, 'utf-8')

    return datenStr

# Wandelt den String datenStr in ein Bytes-Objekt um (Kodierung utf-8)
# und versendet das Bytes-Objekt über den Kommunikationssocket komm_s
def sendeStr(komm_s, datenStr):
    datenBytes = bytes(datenStr, 'utf-8')
    komm_s.sendall(datenBytes)

# Sendet das TrennByte
# daran erkennt der Empfänger, dass der Sender zunächst keine weiteren Daten sendet
def sendeTrennByte(komm_s):
    trennByte = bytes([0])
    komm_s.sendall(trennByte)