Можно ли как-то с Raspberry-сервера отправить код на Raspberry-клиент, выполнить его и результат вернуть на серве? Досталась дипломная работа. Суть: Есть 3 raspberry, один будет как сервер а два остальных как клиенты. С сервера нужно отправить код на исполнение, клиентам. При чём, у клиентов по сути буду разные программы (перемножение матрицы на вектор, только с разными данными). И по окончании выполнения, каждый клиент должен вернуть результат. Само собой, если какая-то ошибка, то она должна прийти на сервер и написать что случилось и с какого клиента. Возможно ли данную задачу решить через Python и socket? Если нет, что тогда посоветуете использовать? Если да, как примерно должна выглядеть сторона сервера и сторона клиента? на словах, алгоритмически Задачу вроде как понимаю. Начал с сокетами разбираться, но а как тогда отправить конкретному клиенту то что мне нужно? Как вообще отправить какой-то код, который обработается на клиенте и пришлёт мне результат?
Да, данную задачу можно решить через 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()
Обратите внимание, что данная концепция достаточно общая и требует доработки и дополнительных проверок для обеспечения безопасности и надежности передачи данных и выполнения кода на клиентских устройствах.
Да, данную задачу можно решить через Python и сокеты.
Примерно алгоритм работы может выглядеть следующим образом:
На сервере создается сокет и начинается прослушивание определенного порта.Клиенты подключаются к серверу, отправляют свое идентификатор и ждут инструкций.Сервер отправляет клиентам код программы для выполнения (например, через метод send() сокета), вместе с данными, если это необходимо.Клиенты выполняют принятый код и отправляют результат обратно серверу (например, также через метод send()).Сервер принимает результаты от клиентов, обрабатывает их и может отправлять новые инструкции или сообщения об ошибке.Пример кода на стороне сервера:
import socketserver_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 socketclient_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()
Обратите внимание, что данная концепция достаточно общая и требует доработки и дополнительных проверок для обеспечения безопасности и надежности передачи данных и выполнения кода на клиентских устройствах.