python tcp服务器 多线程_Python中的多线程TCP服务器

我使用python的threding模块创建了一个简单的多线程tcp服务器。每次连接新客户端时,该服务器都会创建一个新线程。

#!/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(" Welcome to the server ")

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 " Listening for incoming connections..."

(clientsock, (ip, port)) = tcpsock.accept()

newthread = ClientThread(ip, port)

newthread.start()

threads.append(newthread)

for t in threads:

t.join()

然后,我打开了两个新的终端,并使用netcat连接到服务器。然后,当我使用连接的第一个终端输入并向服务器发送第一个数据时,来自服务器的答复将传到另一个终端,并且第一个连接断开。我猜到了原因,但我怀疑是否会发生这种情况,因为

clientsock 变量被覆盖,因此它指向第二个连接的套接字。我是正确的,然后如何避免这种情况?

除了使用套接字变量数量有限的数组并为每个连接使用每个变量之外,还有其他方法吗?

我使用python的threding模块创建了一个简单的多线程tcp服务器。每次连接新客户端时,该服务器都会创建一个新线程。 #!/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(" Welcome to the server ") 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 " Listening for incoming connections..." (clientsock, (ip, port)) = tcpsock.accept() newthread = ClientThread(ip, port) newthread.start() threads.append(newthread) for t in threads: t.join() 然后,我打开了两个新的终端,并使用netcat连接到服务器。然后,当我使用连接的第一个终端输入并向服务器发送第一个数据时,来自服务器的答复将传到另一个终端,并且第一个连接断开。我猜到了原因,但我怀疑是否会发生这种情况,因为 clientsock 变量被覆盖,因此它指向第二个连接的套接字。我是正确的,然后如何避免这种情况? 除了使用套接字变量数量有限的数组并为每个连接使用每个变量之外,还有其他方法吗?
经验分享 程序员 微信小程序 职场和发展