Ich habe einen einfachen Multithread-TCP-Server mit Python-Threading-Modul erstellt. Dieser Server erstellt jedes Mal einen neuen Thread, wenn ein neuer Client verbunden wird.Multi-Threaded TCP-Server in Python
#!/usr/bin/env python
import socket, threading
class ClientThread(threading.Thread):
def __init__(self,ip,port):
threading.Thread.__init__(self)
self.ip = ip
self.port = port
print "[+] New thread started for "+ip+":"+str(port)
def run(self):
print "Connection from : "+ip+":"+str(port)
clientsock.send("\nWelcome to the server\n\n")
data = "dummydata"
while len(data):
data = clientsock.recv(2048)
print "Client sent : "+data
clientsock.send("You sent me : "+data)
print "Client disconnected..."
host = "0.0.0.0"
port = 9999
tcpsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcpsock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
tcpsock.bind((host,port))
threads = []
while True:
tcpsock.listen(4)
print "\nListening for incoming connections..."
(clientsock, (ip, port)) = tcpsock.accept()
newthread = ClientThread(ip, port)
newthread.start()
threads.append(newthread)
for t in threads:
t.join()
Dann habe ich zwei neue Terminals geöffnet und mit Netcat mit dem Server verbunden. Wenn ich dann meine ersten Daten über das erste Terminal, das ich angeschlossen habe, eintippe und an den Server sende, kommt die Antwort vom Server zum anderen Terminal und die erste Verbindung wurde getrennt. Ich vermutete den Grund, aber ich bin zweifelhaft, ob dies passiert, weil clientsock Variable überschrieben wird, so dass es sich auf den Socket der zweiten Verbindung bezieht. Habe ich Recht und dann wie kann ich das vermeiden?
Gibt es eine andere Möglichkeit, als ein Array mit einer begrenzten Anzahl von Socket-Variablen zu verwenden und jede Variable für jede Verbindung zu verwenden?
Keine Sorge, das ist eine gute Frage. Willkommen bei StackOverflow! – Jordan
Es scheint, dass Sie nie die letzten zwei Zeilen erreichen. Ist das beabsichtigt? –