#服务多客户端TCP服务端开发 2 #方法说明 3 """ 4 bind(host,port)表示绑定端口号,host是ip地址,ip地址一般不进 行绑定,表示本机的任何一个ip地址都行,port是端口号 5 listen(backlog)表示设置监听,backlog参数表示最大等待连接的> 个数 6 accept()表示等待接受客户端的连接请求 7 """ 8 import socket 9 import threading 10 #处理客户端请求 11 def client_socket(ip_port,new_client):#子线程来完成 12 print("客户端的ip和端口号为:",ip_port) 13 while True: 14 data = new_client.recv(1024) 15 if data: 16 #接受客户端的收据 17 #对二进制数据进行解码 18 recv_data = data.decode("utf-8") 19 print("接收客户端的数据为:",recv_data) 20 #发送数据到客户端 21 client_data = "最伟大" 22 send_data = client_data.encode("utf-8") 23 new_client.send(send_data) 24 else: 25 print("客户端下线了:",ip_port) 26 break 27 #关闭服务与客户端套接字,表示终止服务端与客户端通信 28 new_client.close() 29 30 if __name__ == "__main__": 31 #创建服务端套接字对象 tcp_server_socket = socket.socket(socket.AF_INET,socket .SOCK_STREAM) 33 #绑定端口号 34 #ip地址一般不写死,只要是本机电脑的任何一个ip地址都行 35 tcp_server_socket.bind(("",8080)) 36 #设置端口号复用:服务端程序退出后端口立即释放 37 #1.socket.SOL_SOCKET:表示当前套接字 38 #2.socket.SO_REUSEADDR:表示复用端口号的选项 39 #3.True:确定复用 40 tcp_server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True) 41 #设置监听 42 tcp_server_socket.listen(128) 43 #等待客户端的连接请求 44 #注意点:每次当客户端和服务端建立连接成功会返回一个新的> 套接字new_client 45 #tcp_server_socket套接字只负责接受连接请求,收发消息只> 用返回的新套接字 46 while True: 47 new_client,ip_port = tcp_server_socket.accept() 48 #客户端和服务端建立连接成功,创建子线程,让子线程专 门负责接受客户端消息 49 sub_thread = threading.Thread(target = client_socket,args = (ip_port,new_client)) 50 #设置守护主线程,主线程退出子线程直接销毁 51 sub_thread.setDaemon(True) 52 #关闭服务端套接字 53 sub_thread.start() 54 #服务端需要一直运行 55 #tcp_server_socket.close()
实现多任务可以用进程或者线程来来完成
但开辟线程对资源的消耗比线程大,所以我们选择创建子线程来完成服务器服务于多客户端