threading_socket.py

import socket
import threading

def handle_client_request(new_client,ip_port):
“”"
客户端子线程
:param new_client: 客户端对应通信的套接字对象
:param ip_port: 客户端IP 端口欧
:return:
“”"
# 代码执行到此代表客户端与服务器建立连接成功
print(f’客户端的IP、端口为:{ip_port}’)
while True:
# 5.接收数据
recv_data = new_client.recv(1024)
if recv_data:
print(f"接受客户端的数据为:{recv_data.decode(‘gbk’)}—{ip_port}")
# 6.发送数据
send_content = “问题正在处理中。。。”
send_data = send_content.encode(‘gbk’)
new_client.send(send_data)
else:
print(f’客户端下线了,{ip_port}’)
break
# 关闭服务端与客户端通线的套接字
new_client.close()

if name == ‘main’:
# 1.创建服务端套接字对象
tcp_server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 设置端口复用
# 第一个参数:SOL_SOCKET 表示当前套接字
# 第二个参数:SO_REUSEADDR 表示复用端口号的选项
# 第三个参数:True 表示确定复用
tcp_server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)
# 2.绑定端口
# 第一个参数表示IP地址,一般不用指定,表示本机任何一个IP
# 第二个参数表示端口
tcp_server.bind((’’,9090))
# 3.设置监听
# 128:表示最大等待建立连接个数
tcp_server.listen(128)
# 循环等待客户端的请求
while True:
# 4.等到接受客户端的链接请求
# tcp_server:只负责等待客户端的链接,不进行收发消息
# 产生一个新的套接字(客服人员),后续客户端通讯与新套接字进行通讯
new_client,ip_port = tcp_server.accept()

    # 当客户端与服务端连接成功,应该创建一个子线程
    sub_thread = threading.Thread(target=handle_client_request,args=(new_client,ip_port))
    # 设置守护主线程,主线程退出子线程直接销毁
    sub_thread.setDaemon(True)
    sub_thread.start()

# 7.关闭套接字
# 因为服务端需要一直运行,关闭服务端的套接字可省略不写
tcp_server.close()

猜你喜欢

转载自blog.csdn.net/Depressiom/article/details/121013510
py