[英]multithreaded server in python
我有一個用python編寫的服務器-客戶端應用程序。 一切正常,但我想使服務器成為多線程服務器,並且一切崩潰。
這是服務器代碼的一部分:
host = 'localhost'
port = 10001
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
class ClientThread(threading.Thread):
def __init__(self, ip, port, socket):
print '5'
threading.Thread.__init__(self)
self.ip = ip
self.port = port
self.socket = socket
print "[+] New thread started for "+ip+":"+str(port)
def __run__(self):
while True:
try:
#conn, addr = sock.accept()
print >>sys.stderr, "Connection from : "+ip+":"+str(port)
print '6'
#reqCommand = conn.recv(1024)
reqCommand = self.recv(1024)
print '7'
command = reqCommand.split(' ', 1) # get <<filename>>
print '8'
reqFile = command[1] # takes the name of the file
reqCommand = command[0]
print '9'
encFile = reqFile + "_enc"
print >>sys.stderr, 'Client> %s' % (reqCommand)
if (reqCommand == 'get'):
pass
try:
os.remove(encFile) # removes the encrypted file
except OSError, e:
print ("Error: %s - %s." % (e.filename,e.strerror))
print >>sys.stderr, 'successfully finished'
print >>sys.stderr, 'waiting for new connections...'
finally:
# clean up connection
self.close()
while True:
sock.listen(4)
print "\nListening for incoming connections..."
(conn, (ip, port)) = sock.accept()
print '1'
newthread = ClientThread(ip, port, conn)
print '2'
newthread.start()
print '3'
threads.append(newthread)
print '4'
當我輸入客戶端:“ get”時,它將消息發送到客戶端,但沒有收到任何回信。 如您所見,在服務器中,我有很多打印品可以查看崩潰的位置。 它按以下順序打印:1 5 2 3 4. +它還打印[+]新線程...
您還可以看到我使用了self.recv而不是conn.recv(這是我在stackoverflow上找到的一個解決方案,但是它沒有用)
有人知道我在做什么錯嗎? 我再次提到,在添加線程和ClientThread類之前,一切正常。 提前致謝!
顯示的代碼中有很多錯誤。
例如self.recv(1024)
應該替換成self.socket.recv(1024)
,而self.close()
替換成self.socket.close()
? (因為self
是ClientThread / Thread的實例,而不是套接字)。 我也認為run方法應該命名為run
(而不是__run__
),如果您在run()
while True
第二次while True
final in run()
中run()
close()
,則連接將已經關閉。
除此之外,缺少大塊,例如所有導入,以及對bind()的調用-例如類似sock.bind((socket.gethostname(), port))
除此之外,並假設所有這些錯誤都是固定的,看來它應該做應該做的事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.