在python中线程化服务器套接字

时间:2017-02-13 11:12:43

标签: python multithreading sockets

我想在python中使用线程服务器套接字。我从互联网上找到了这个代码。我工作得很好,但我不知道发生了什么。 任何人都可以简单地解释它,我想将数据从main发送到MiTcpHandler类。我怎么能这样做?

import SocketServer
import threading
import time

class MiTcpHandler(SocketServer.BaseRequestHandler):
    def handle(self):
        data = ""
        while data != 'End':
            data = self.request.recv(1024)
            print data
            time.sleep(0.1)


class ThreadServer(SocketServer.ThreadingMixIn,SocketServer.ForkingTCPServer):
    pass

def Main():
    host=''
    port = 9998
    server = ThreadServer((host,port),MiTcpHandler)
    server_thread = threading.Thread(target=server.serve_forever)
    server_thread.start()


Main()

1 个答案:

答案 0 :(得分:0)

如评论中所述,您应该阅读SocketServer模块文档。它包括如何使用它的示例。由此您可以了解代码的工作原理。

对于问题的第二部分,如何从" main"在线程中,您需要建立到服务器的TCP连接(同一主机上的端口9998)。您可以使用socket.create_connection()

def Main():
    host=''
    port = 9998
    server = ThreadServer((host,port),MiTcpHandler)
    server_thread = threading.Thread(target=server.serve_forever)
    server_thread.start()

    # connect to the server and send some data
    import socket
    s = socket.create_connection(('localhost', 9998))
    s.send('hi there\n')
    s.send('End\n')

这将从充当客户端的main函数将数据发送到服务器。请注意,您需要在处理程序中执行更多工作,以正确处理终止连接和检测终止"End"字符串。