原理:
1 import socket 2 import time 3 4 5 def main(): 6 # 创建套接字 7 tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 8 # 绑定端口 9 tcp_server_socket.bind(("",7890)) 10 # 设置监听状态 11 tcp_server_socket.listen(128) 12 # 设置非堵塞 13 tcp_server_socket.setblocking(False) 14 15 new_client_list = list() 16 17 while True: 18 time.sleep(0.5) 19 try: 20 new_client, client_addr = tcp_server_socket.accept() 21 except Exception as ret: 22 print("-----没有新的客户端进来-----") 23 else: 24 print("----没有产生异常,意味一个新客户端到来-----") 25 # 为新客户端非堵塞服务 26 new_client.setblocking(False) 27 # 把新产生的socket存入列表 28 new_client_list.append(new_client) 29 30 for new_client_socket in new_client_list: 31 try: 32 recv_data = new_client_socket.recv(1024) 33 except Exception as ret: 34 print("----客户端没有发来数据-----") 35 else: 36 print("-----没有异常,意味着有数据-----") 37 # 如果发来的数据不为空 38 if recv_data: 39 print("----客户端发来的数据-----") 40 # 如果数据为空,意味着客户端调用了close() 41 else: 42 new_client_socket.close() 43 new_client_list.remove(new_client_socket) 44 print("----客户端已关闭-----") 45 46 # 关闭套接字 47 tcp_server_socket.close()