当TCPServer与ThreadingMixIn结合时,它是b

2024-06-01 10:57:02 发布

您现在位置:Python中文网/ 问答频道 /正文

服务器端代码(tcp_服务器.py)公司名称:

from SocketServer import TCPServer, ThreadingMixIn, StreamRequestHandler

class Server(ThreadingMixIn, TCPServer):
    pass

class Handler(StreamRequestHandler):

    def handle(self):
        print 'got a connection from: ', self.request.getpeername()
        print self.rfile.read(1024)
        msg = 'hello'
        self.wfile.write(msg)

server = Server(('127.0.0.1', 8888), Handler)
server.serve_forever()

客户端代码(tcp_客户端.py)公司名称:

^{pr2}$

我运行了tcp_server.py,然后tcp_client.pytcp_client.py应该很快就结束了。然而,tcp_client.py似乎只运行一个线程并被阻塞,tcp_server.py只得到一个连接。当我打断tcp_client.py时,tcp_server.py收到一条消息this is client

我的代码有错误吗?在


Tags: 代码frompyself名称clientserver公司
2条回答

这条线:

t = threading.Thread(target=do_connection())

应该是

^{pr2}$

当您使用do_connection()时,您将在主线程中执行do_connection,然后将该调用的返回值传递给Thread对象。您要做的是将do_connection函数对象传递给Thread,这样当您调用t.start时,Thread对象可以在新线程中执行{}。在

另外,请注意,同时启动100个线程以连接到服务器可能不会很好地执行。您可能需要考虑从更少的线程开始,并且在您知道一切正常运行后,逐步增加到更高的数量。在

由于第一个请求(1024)被第一个尝试读取的服务器阻止 readline在服务器.py并将'\n'添加到从客户端发送的内容中 作品。在

看起来rfile.read文件(1024)将阻止how进程,因此goodway是使用readline 或者使用self.request.recv(1024个)

在服务器.py在

from SocketServer import TCPServer, ThreadingMixIn, StreamRequestHandler

class Server(ThreadingMixIn, TCPServer):
    pass

class Handler(StreamRequestHandler):

    def handle(self):
        print 'got a connection from: ', self.request.getpeername()
        print self.rfile.readline()
        #print self.request.recv(1024).strip()
        msg = 'hello'
        self.wfile.write(msg)


# Create the server, binding to localhost on port 9999
server = Server(("127.0.0.1", 8888), Handler)
server.serve_forever()

在客户端.py在

^{pr2}$

相关问题 更多 >