Я занимаюсь разработкой веб-приложения, которое будет закрывать данные с нескольких удаленных серверов и показывать их на веб-странице, и в то же время я хочу запускать команды на выбранных удаленных системах. Я рассмотрел эту часть для извлечения данных с удаленных серверов. используя python asyncio, сокет, но застрял там, где мне нужно отправить данные выбранным клиентам. Нужны идеи и помощь.
Примечание ** использование колбы для разработки интерфейса.
---------server.py---------
from socket import *
import asyncio,pickle
all_connections = []
all_addresses = []
async def echo_server(address, loop):
sock = socket(AF_INET, SOCK_STREAM)
sock.bind(address)
sock.listen(1)
sock.setblocking(False)
for c in all_connections:
c.close()
del all_connections[:]
del all_addresses[:]
while True:
# client,addr=sock.accept()
client, addr = await loop.sock_accept(sock)
all_connections.append(client)
all_addresses.append(address)
print('connection from', all_addresses[0])
loop.create_task(get_data(client, loop))
async def get_data(client, loop):
while True:
data = await loop.sock_recv(client, 1024)
data=pickle.loads(data)
if not data:
break
print('recived data is ',data)
print('connection closing ')
client.close()
print('Connection Closed')
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(echo_server(('', 25000), loop))
------------client.py---------
from socket import *
import asyncio,time,pickle,psutil,pythoncom,wmi
from datetime import datetime, timedelta
async def echo_client(address,loop):
try:
sock = socket(AF_INET, SOCK_STREAM)
sock.connect(address)
sock.setblocking(False)
except ConnectionRefusedError:
print('retryinig to connect')
connected = False
while not connected:
try:
sock.connect(address)
sock.setblocking(False)
connected=True
except ConnectionRefusedError:
time.sleep(2)
while True:
system_data=get_data()
data=pickle.dumps(system_data)
try:
await loop.sock_sendall(sock,data)
except ConnectionResetError:
connected=False
sock = socket(AF_INET, SOCK_STREAM)
while not connected:
try:
print('connection lost Retrying to send data')
sock.connect(address)
sock.setblocking(False)
await loop.sock_sendall(sock, data)
connected=True
except ConnectionRefusedError:
time.sleep(5)
sock.close()
def get_data():
system_data = {"HostName": "null", "UpTime": "null", "CPU": "null"}
host_name = gethostname()
system_data["HostName"] = host_name
cpu_utilization = psutil.cpu_percent(interval=5)
system_data["CPU"] = cpu_utilization
pythoncom.CoInitialize()
c = wmi.WMI()
for os in c.Win32_OperatingSystem():
time = os.LastBootUpTime.split('.')[0]
last_boot_time = datetime.strptime(time, '%Y%m%d%I%M%S')
system_data["UpTime"] = str(last_boot_time)
return system_data
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(echo_client(('X.X.X.X', 25000),loop))
want to control remote system where client running .