---------Python基础编程---------
Author : AI菌
【内容讲解】
一、解释:
能够同时服务于多个客户端的TCP服务端程序
二、具体实现步骤
1、编写一个TCP服务端程序,循环等待接受客户端的连接请求
2、当客户端和服务端建立连接成功,创建子线程,使用子线程专门处理客户端的请求,防止主线程阻塞
3、把创建的子线程设置成为守护主线程,防止主线程无法退出。
【代码演示】
"""
一、解释:
能够同时服务于多个客户端的TCP服务端程序
二、具体实现步骤
1、编写一个TCP服务端程序,循环等待接受客户端的连接请求
2、当客户端和服务端建立连接成功,创建子线程,使用子线程专门处理客户端的请求,防止主线程阻塞
3、把创建的子线程设置成为守护主线程,防止主线程无法退出。
"""
import socket
import threading
# 处理客户端请求的函数
def handle_client(new_socket, ip_port):
# 循环接收客户端的数据
while True:
# 接收客户端发送的数据
recv_data = new_socket.recv(1024)
if recv_data:
# 对二进制数据进行解码
recv_content = recv_data.decode("utf-8")
print("接收客户端的数据为:", recv_content)
# 发送数据
new_socket.send("服务端".encode("utf-8"))
else:
print("客户端下线:", ip_port)
break
# 关闭套接字
new_socket.close()
if __name__ == '__main__':
# 创建tcp服务端套接字
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 设置端口号复用,程序退出端口号立即释放
tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
# 绑定端口号
tcp_server_socket.bind(("", 9090))
# 设置监听
tcp_server_socket.listen(128)
# 循环等待接受客户端的连接请求
while True:
# 等待接受客户端的连接请求
new_socket, ip_port = tcp_server_socket.accept()
print("客户端为:", ip_port)
# 创建子线程,专门负责处理客户端请求
sub_thread = threading.Thread(target=handle_client, args=(new_socket, ip_port))
# 设置守护主线程,防止服务端无法关闭
sub_thread.setDaemon(True)
# 启动子线程执行任务
sub_thread.start()
# 提示: 服务端程序需要一直运行,所以tcp服务端的套接字可以不用关闭
# tcp_server_socket.close()
【运行结果】
TCP客户端程序(网络调试助手):
作为TCP服务端的程序:
客户端为: ('192.168.1.235', 39664)
客户端为: ('192.168.1.235', 39666)
接收客户端的数据为: client_1
接收客户端的数据为: client_2