概述
在 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()