2014-11-29 2 views
0
import socket 

def functions(): 
    print ("hello") 


sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 

server_address = ('192.168.137.1', 20000) 
sock.bind(server_address) 
sock.listen(1) 
conn, addr = sock.accept() 
print ('Connected by', addr) 

sock.listen(1) 
conn.sendall(b"Welcome to the server") 

Мой вопрос заключается в том, чтобы послать функции клиенту, я знаю, что conn.sendall (б «Добро пожаловать на сервер») будут данные клиенту. Который может быть декодирован.Python 3.4 Розетки SendAll функция

Я хотел бы знать, как отправить функцию клиенту как conn.sendall (функция()) - это не работает

Кроме того, я хотел бы знать, функцию, которая позволит клиенту получить функцию, которую я отправляю

Я просмотрел python website для функции, которая могла бы это сделать, но я ее не нашел.

ответ

1

Запрошенная вами функция принципиально невозможна, если явно не закодирована на стороне клиента. Если бы это было возможно, можно было бы написать вирус, который легко распространяется на любую удаленную машину. Вместо этого, это ответственность за права пользователя на декодирование входящих данных каким-либо образом.

Учитывая случай клиент действительно хочет получить код для выполнения, вопрос в том, что код должен быть представлен в форме, которая, в то же время,

  • отсоединяется от контекста сервера и его специфики, и может быть сериализована и выполнена в любом месте
  • позволяет безопасное выполнение в виде песочницы, поскольку очень редкий клиент позволит произвольному серверному коду делать что-либо на стороне клиента.

Последнее является чрезвычайно сложной темой; вы можете прочитать любую историю безопасности браузера WWW - большинство закрытых уязвимостей имеют проблемы в такой песочнице.

(Есть среды, когда такое исполнение допускается и желанной;., Например Erlang печенья на основе вглядываясь кластера Но, в таком кластере, сторона B также разрешено выполнять что-либо на стороне А.)

Вы должны начать с поиском среды выполнения (виртуальная машина высокого уровня), которая соответствует вашим потребностям в функциональности и безопасности. Для Python вы бы посмотрели на модуль multiprocessing: его реализация пулов рабочих не пропускает сам код, а упрощает передачу данных для запросов на выполнение. Кроме того, передача произвольных данных Python без функций покрывается модулями marshal и pickle.