利用线程实现,一个服务端同时服务多个客户端的需求。
TCP服务端-线程版代码实现:
1 import socket 2 import threading 3 4 5 def handle_client_socket(new_socket, ip_port): 6 print("建立连接成功:", ip_port) 7 while True: 8 # 8.使用新的套接字发送数据 9 send_data = "你好,我是服务端。" 10 send_data_encode = send_data.encode("gbk") 11 new_socket.send(send_data_encode) 12 # 7.使用新的套接字接收数据,并设置最大数据接收长度为1024 13 recv_data = new_socket.recv(1024) 14 if recv_data: 15 recv_data_decode = recv_data.decode("gbk") 16 print("服务端接收的数据为:", recv_data_decode) 17 else: 18 print("客户端下线了", ip_port) 19 break 20 # 9.关闭套接字 21 # 与客户端断开通信 22 new_socket.close() 23 24 25 # 1.导入模块 26 if __name__ == '__main__': 27 # 2.创建套接字对象 28 tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 29 30 # 3.设置端口复用 31 tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True) 32 33 # 4.绑定端口 34 tcp_server_socket.bind(("", 9090)) 35 36 # 5.设置监听,并设置最大等待连接数为128 37 tcp_server_socket.listen(128) 38 while True: 39 # 6.等待客户端建立连接,并接收accpet()返回的新的套接字对象,和客户端IP+端口号 40 new_socket, ip_port = tcp_server_socket.accept() 41 socket_thread = threading.Thread(target=handle_client_socket, args=(new_socket, ip_port), daemon=True) 42 socket_thread.start() 43 44 # 停止服务端服务 45 # tcp_server_socket.close()