# _*_ coding: utf-8 _*_
"""
Time: 2022/05/13 19:13
Author: Jyun
Version: V 0.1
File: SocketDemo.py
Blog link: https://ctrlcv.blog.csdn.net/
"""
import socket
from threading import Thread
# 异步方法装饰器
def async_way(func):
def wrapper(*args, **kwargs):
t = Thread(target=func, args=args, kwargs=kwargs)
t.setDaemon(True)
t.start()
return t # 返回线程对象用于后续操作
return wrapper
class SocketService:
def __init__(self):
# 初始化套接字
self.tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.client_count = 0
@async_way
def _start(self):
# 等待接收链接请求 返回一个元组 (<客户端socket对象>,(<客户端的地址>,<端口>))
client, addr = self.tcp_socket.accept()
print('已接入', addr)
self.client_count += 1
self._start() # 当有客户端接入时, 再启动一个线程等待下一个客户端接入
while True:
# 用客户端socket对象接收
data = client.recv(204800)
print(str(data)) # 打印收到的原数据
# client.send(b'') # 这里也可以给客户端发送消息
if not data:
client.close()
print('已断开', addr)
break
def run(self, ip='0.0.0.0', port=7000):
# 绑定ip和port
self.tcp_socket.bind((ip, port))
# 设置为被动监听模式,最大并发接收的数量是128
self.tcp_socket.listen(128)
self._start()
print('服务已启动!')
while True:
print('当前客户端数量:', self.client_count)
cmd = input('输入"Q"退出并关闭服务。\n>>>')
if str(cmd.lower()) == 'q':
self.tcp_socket.close()
break
if __name__ == '__main__':
app = SocketService()
app.run(ip='0.0.0.0', port=7000)
python 实现支持多客户端的 Socket服务 Demo
最新推荐文章于 2024-03-16 14:59:44 发布