Можно ли как-то с Raspberry-сервера отправить код на Raspberry-клиент, выполнить его и результат вернуть на серве? Досталась дипломная работа. Суть:
Есть 3 raspberry, один будет как сервер а два остальных как клиенты. С сервера нужно отправить код на исполнение, клиентам. При чём, у клиентов по сути буду разные программы (перемножение матрицы на вектор, только с разными данными). И по окончании выполнения, каждый клиент должен вернуть результат.
Само собой, если какая-то ошибка, то она должна прийти на сервер и написать что случилось и с какого клиента.
Возможно ли данную задачу решить через Python и socket?
Если нет, что тогда посоветуете использовать?
Если да, как примерно должна выглядеть сторона сервера и сторона клиента? на словах, алгоритмически
Задачу вроде как понимаю. Начал с сокетами разбираться, но а как тогда отправить конкретному клиенту то что мне нужно? Как вообще отправить какой-то код, который обработается на клиенте и пришлёт мне результат?

12 Окт 2020 в 19:49
464 +1
0
Ответы
1

Да, данную задачу можно решить через Python и сокеты.

Примерно алгоритм работы может выглядеть следующим образом:

На сервере создается сокет и начинается прослушивание определенного порта.Клиенты подключаются к серверу, отправляют свое идентификатор и ждут инструкций.Сервер отправляет клиентам код программы для выполнения (например, через метод send() сокета), вместе с данными, если это необходимо.Клиенты выполняют принятый код и отправляют результат обратно серверу (например, также через метод send()).Сервер принимает результаты от клиентов, обрабатывает их и может отправлять новые инструкции или сообщения об ошибке.

Пример кода на стороне сервера:

import socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('0.0.0.0', 8888))
server_socket.listen(2)
clients = []
while True:
client_socket, address = server_socket.accept()
clients.append(client_socket)
print(f"Connected to {address}")
for client in clients:
client.send(b"Code to execute")
data = client.recv(1024)
print(f"Received data from {address}: {data.decode()}")
client_socket.close()

Пример кода на стороне клиента:

import socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('server_ip', 8888))
data = client_socket.recv(1024)
# Execute received code
result = "Result"
client_socket.send(result.encode())
client_socket.close()

Обратите внимание, что данная концепция достаточно общая и требует доработки и дополнительных проверок для обеспечения безопасности и надежности передачи данных и выполнения кода на клиентских устройствах.

17 Апр 2024 в 22:54
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир