测试代码:
import socket
import threading
import datetime
class A:
def __init__(self, ip='127.0.0.1', port=9999, interval=10):
self.addr = ip, port
self.sock = socket.socket(type=socket.SOCK_DGRAM)
self.interval = interval
self.clients = {}
def start(self):
self.sock.bind(self.addr)
threading.Thread(target=self.recv, name='recv').start()
def recv(self):
while True:
data, clientinfo = self.sock.recvfrom(1024)
print(data, clientinfo)
current = datetime.datetime.now().timestamp()
self.clients[clientinfo] = current
pops = set()
for i, stamp in self.clients.items():
if current - stamp > self.interval:
pops.add(clientinfo)
else:
self.sock.sendto(data, i)
for x in pops:
self.clients.pop(x)
a = A()
a.start()