Python клиент-сервер
Есть клиент и сервер. Серверу надо принять сообщение от клиента(клиент вводит только имя,потом отправляет запрос для обработки лог файла,типа C:\Windows\Logs\DISM\dism.log).
import socket, time
import re
# В этом списке собираются подстроки для проверки через in
bad_line_parts = [
'Standby redo logfile selected for thread'
]
bad_reg_exprs = {
re.compile('[A-Z][a-z]{2} [A-Z][a-z]{2} \d{1,2} \d\d:\d\d:\d\d \d{4}'),
# здесь дополнить другими регулярными выражениями, если потребуется
}
def is_fine_line(line):
return (not any(bad_line_part in line
for bad_line_part in bad_line_parts) and
not any(bad_reg_expr.match(line)
for bad_reg_expr in bad_reg_exprs))
host = socket.gethostbyname(socket.gethostname()) # Чтобы не писать ip 'xxx.xxx.x.xxx' , т.к. он может поменяться
port = 9090 # Точно не занят
clients = [] # Список клиентов, их адреса, а не username(для сервера,адреса всегда разные)
s = socket.socket(socket.AF_INET,
socket.SOCK_DGRAM) # 1-сокет TCP, 2- IP, с этим протоколом работаем, т.е. объявляем протокол TCP-Ip в переменную s
s.bind((host, port)) # Объявляем протокол на создание, т.е. на этом хосте и порте будет работы
quit = False # Переменная qiite нужна для того,чтобы цикл мог прекратиться
print("[ Server Started ]")
while not quit: # data это сообщение,которые отправляет пользователь, addr-это id пользователя *****
try:
data, addr = s.recvfrom(
1024) # если addr не находится в клиентах,то к клиенту прибавляем addr, итог список клиентов всегда будет добавляться в clients
# сервер может принимать до 1 кбайт
if addr not in clients:
clients.append(addr)
itsatime = time.strftime("%Y-%m-%d-%H.%M.%S", time.localtime()) # когда сообщение было отправлено
print("[" + addr[0] + "]=[" + str(addr[1]) + "]=[" + itsatime + "]/",
end="") # выводим адрес с(ip), id пользователя,время
print(data.decode("utf-8")) # декодировали,для норм.отображения на сервер
for client in clients: # Типа для каждого клиента ,если if выполняется, будет отправка лог
if addr == client:
s.sendto(data, client)
except: # Если произойдет ошибка, то высветится сообщение и переменная quite станет true
print("\n[ Server Stopped ]")
quit = True
s.close()
UPD.
Может быть
A=[]
for client in clients:
if addr == client:
with open(data, 'r') as log_file:`
for line in log_file.readlines():
if is_fine_line(line):
A.append(line)
s.sendto(A, client)