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__),如果您close()run()第二次while True执行后终于执行了连接,则该连接将已经关闭。

除此之外,缺少大块,例如所有导入,以及对bind()的调用-例如 sock.bind((socket.gethostname(), port))

除此之外,并假设所有这些错误都是固定的,看来它应该做应该做的事情。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python中的简单多线程Web服务器

来自分类Dev

python扭曲多线程服务器

来自分类Dev

Java中的多线程服务器

来自分类Dev

多线程服务器

来自分类Dev

多线程服务器

来自分类Dev

C中的多线程服务器(线程丢失)

来自分类Dev

Python上的多线程Websocket服务器

来自分类Dev

如何多线程Flask服务器和python脚本?

来自分类Dev

如何在python服务器上多线程

来自分类Dev

多线程服务器中的全局状态

来自分类Dev

多线程服务器中的处理限制

来自分类Dev

多线程http服务器中的pthread_create

来自分类Dev

避免多线程UDP服务器中的数据丢失

来自分类Dev

多线程服务器Java

来自分类Dev

多线程Clojure Luminus服务器?

来自分类Dev

多线程文件服务器Java

来自分类Dev

Delphi / Indy多线程服务器

来自分类Dev

多线程服务器Java

来自分类Dev

netcat作为多线程服务器

来自分类Dev

多线程文件服务器Java

来自分类Dev

多线程回显服务器

来自分类Dev

多线程Web服务器上的python + wsgi:这是竞争条件吗?

来自分类Dev

在python中使用SocketServer框架创建多线程服务器

来自分类Dev

python多线程服务器无法从客户端接收数据

来自分类Dev

在python中使用SocketServer框架创建多线程服务器

来自分类Dev

多线程Web服务器上的python + wsgi:这是竞争条件吗?

来自分类Dev

Java中的多线程客户端服务器聊天应用程序

来自分类Dev

io_context或std :: cout在多线程UDP服务器中的奇怪行为

来自分类Dev

从远程服务器获取文件时在perl中实现多线程?