Hallo zusammen,
hab endlich mal wieder Zeit gefunden, ein wenig zu programmieren und hab mich dabei wieder an ein schon länger bestehendes Problem für mich gesetzt:
Socketverbindungen mit mehreren Clients.
Ich hab aus einem Tutorial folgenden Code für den Server:
import socketserver
class ChatRequestHandler(socketserver.BaseRequestHandler):
def handle(self):
addr = self.client_address[0]
print("[{}] Verbindung hergestellt".format(addr))
while True:
s = self.request.recv(1024)
if s:
print("[{}] {}".format(addr, s.decode()))
else:
print("[{}] Verbindung geschlossen".format(addr))
break
server = socketserver.ThreadingTCPServer(("", 50000), ChatRequestHandler)
server.serve_forever()
Alles anzeigen
Wenn ich jetzt meine Armee von Pis mit folgenden Client-Code drauf los lasse:
import socket
#ip = input("IP-Adresse: ")
ip = socket.gethostbyname('tstserver')
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((ip, 50000))
try:
while True:
nachricht = input("Nachricht: ")
s.send(nachricht.encode())
finally:
s.close()
Alles anzeigen
funktioniert das problemlos, dass beim Server die Nachrichten und Verbindungen angezeigt werden.
Mir fehlt allerdings für folgende Anforderung gerade das Transferdenken:
Ich hab verschiedene Typen von Clients: Steuergerät und Aktoren.
Ich will vom Steuergerät (Webanwendung) an den Server Befehle schicken, die verarbeitet und aufgrund von Konfiguration an bestimmte Aktoren weiter geschickt werden sollen (also nicht an alle Clients!).
Ich hab mir das ungefähr so vorgestellt, dass die Clients einzeln nach aufgebauter Verbindung in Listen oder Directorys gespeichert werden, woraus ich dann einzelne auswählen und Nachrichten an diese versenden kann. Und das hab ich noch nicht so ganz rausgefunden, wie das mit dem Socket-OOP funktioniert.
Kann mir da mal bitte jemand auf die Sprünge helfen? Hab mit Google auch nicht wirklich was hilfreiches gefunden.
Vielen Dank im raus und
liebe Grüße
Fipsi