Python脚本:TCP server服务端开发 三次握手

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())

验证工具使用的是socket调测工具,适合千人同时访问的脚本代码(需要工具可以私信)




 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值