import socket,time
server=socket.socket()
ip='127.0.0.1'
port=8888
#
# server.bind((ip,port)) #绑定
# server.listen()
# print(server)
#
# newsock,clientinfo=server.accept()
#
# print('newsock',clientinfo)
# data=newsock.recv(1024)
# print(data)
# newsock.send('server ack data={}'.format(data).encode())
# newsock.close()
#
# newsock2,clientinfo2=server.accept()
# print('newsock2',clientinfo2)
# data=newsock2.recv(1024)
# print(data)
# newsock2.send('server new2 data={}'.format(data).encode())
# newsock2.close()
#
# server.close()
import socket,time,datetime,logging,threading
FORMAT= "%(asctime)s %(threadName)s %(thread)d %(message)s "
logging.basicConfig(format=FORMAT,level=logging.INFO)
class chatserver:
def __init__(self,ip='127.0.0.1',port=8080):
self.sock=socket.socket()
self.addr=ip,port
self.event=threading.Event()
self.clients= {}
self.lock = threading.Lock()
def start(self):
self.sock.bind(self.addr)
self.sock.listen()
threading.Thread(target=self.accept, name="accpet").start()
def accept(self):
while not self.event.is_set():
newsock,clientiinfo=self.sock.accept()
with self.lock:
self.clients[clientiinfo]=newsock
threading.Thread(target=self.revc,name='revc',args=(newsock,clientiinfo)).start()
def revc(self,sock:socket.socket, clientiinfo):
while not self.event.is_set():
try:
data=sock.recv(1024) #客户端输入
except:
data=b''
print(data)
if data.strip()==b'byte' or data.strip()==b'':
with self.lock:
self.clients.pop(clientiinfo)
sock.close()
break
msg="{:%Y/%m/%d %H:%M:%S} [{}:{}] - {}".format(datetime.datetime.now(),
*clientiinfo,data.decode())
with self.lock:
exps=[]
for k,v in self.clients.items():
try:
v.send(msg.encode())#服务端 返回师傅
except:
exps.append(k)
for k in exps:
self.clients.pop(k)
def stop(self):
self.event.set()
keys=[ ]
with self.lock:
keys = list(self.clients.keys())
self.clients.clear()
for i in keys:
i.close()
self.sock.close()
n=chatserver()
n.start()
while True:
cmd=input(">>").strip()
if cmd=='quit':
n.stop()
break
logging.info(threading.enumerate())
Python脚本:TCP server服务端开发 三次握手
猜你喜欢
转载自blog.csdn.net/m0_52454621/article/details/118181220
今日推荐
周排行