python之TCP服务器(2.0版 多线程)

概述

在 python之TCP服务器(1.1版) 文中,虽然可以 连接多个客户端,多次发送的数据,但执行效率不高,无法实现并发,本文通过多线程实现并发

import socket,threading

def deal(conn,address):
    try:
        conn.sendall('server is ok!'.encode('utf-8'))
        while True:
            data=conn.recv(1024)
            #当接收数据长度为0时,表示远端socket已经close
            print('接收数据长度:%d'%len(data))
            if len(data)>0:
                print("来自%s:%s的消息:"%(address[0],address[1]),data.decode('utf-8'))
            else:
                break
    except BaseException as e:
        #当远端程序直接退出(没有执行socket的close()),会抛出异常,捕捉异常是为了防止服务器端退出
        print(e)
    finally:
        conn.close()
    print('\n\n-------------------------')

def main():
    s = socket.socket()
    s.bind(('0.0.0.0', 9999))
    s.listen(5)
    print('开始监听')
    #在这里写一个死循环,永远接收客户端请求
    while True:
        conn, address = s.accept()
        print('接收到客户端请求')
        print('conn类型',type(conn))
        print('address类型',type(address),address)
        #启动线程处理
        t=threading.Thread(target=deal,args=(conn,address))
        t.start()

if __name__ == "__main__":
    main()

原文出处:/show_1EF30WA8WbXF.html