@Quakxi: Man kann über TCP nur Bytes verschicken und empfangen. Wenn man Zeichenketten hat, dann muss man die vorher als Bytes kodieren. Und beide Seiten sollten sich einig darüber sein *wie* die Zeichenketten kodiert sind.
Sonstige Anmerkungen zum Quelltext:
`lieder` sollte nicht auf Modulebene definiert werden. Das Hauptprogramm gehört dort auch nicht hin, sondern auch in eine Funktion. Sonst verliert man bei allem das über ein paar Zeilen hinaus geht den überblick weil alles irgendwie mit allem anderen zusammenhängen könnte, statt saubere, kleine, in sich geschlossene Funktionen zu verwenden.
`i` wird auf Modulebene definiert, aber nirgends benutzt. Das lokale `i` in der `WennVerbunden()`-Funktion hat mit dem anderen `i` nichts zu tun. Und das in der Funktion wird auch nur definiert wenn ein Dateiname mit einem Punkt anfängt. Und dann aber auch wieder nirgends benutzt. Weg damit.
Die Schreibweise von `WennVerbunden()` entspricht nicht dem
Style Guide for Python Code, wie auch ein paar andere Sachen nicht. Ausserdem ist das kein guter Name für eine Funktion, die genau wie Methoden, normalerweise nach Tätigkeiten benannt werden, damit man weiss was sie tun. `send_filenames()` wäre zum Beispiel ein sprechenderer Bezeichner.
`liederUn` ist unverständlich. Was soll das `Un` bedeuten? Namen sollen dem Leser vermitteln was der Wert dahinter bedeutet und nicht zum rätselraten animieren.
`insert()` ist definitiv die falsche Methode um einen Wert an eine Liste *anzuhängen*. Wie kommt man auf diese Idee?
``print`` ist in Python 2 eine Anweisung und keine Funktion also sollte man das auch nicht wie einen Funktionsaufruf schreiben. Oder aus dem `__future__`-Modul den Namen `print_function` importierten damit es zu einer Funktion wird. Dann muss man aber auch wirklich alle Vorkommen als Funktionsaufruf schreiben.
Der `str()`-Aufruf mit `lied` ist überflüssig.
Die Dateinamen werden ohne jegliche Trennzeichen übertragen — wie soll der Empfänger denn das wieder auseinander dividieren?
Python hat Wahrheitswerte (`True` und `False`) die sollte man auch verwenden wenn man sie meint, und nicht 1 und 0.
Die Semantik von der Empfangsschleife sieht komisch aus. Wie oft die durchlaufen wird hängt von unverhersehbaren Faktoren ab, nämlich wie die ankommenden Daten übertragen und gepuffert werden, also wie viele `recv()`-Aufrufe letztendlich benötigt werden um die empfangenen Daten auszulesen. Der Inhalt wird auch komplett ignoriert.
`verbunden` wird definiert und nicht benutzt.
Dadurch das `lieder` auf Modulebene definiert ist, wird diese Liste bei jedem Aufruf von `WennVerbunden` länger. Das sieht mir auch falsch aus.