Function Python 3.4套接字sendall函数

Function Python 3.4套接字sendall函数,function,sockets,python-3.x,client,Function,Sockets,Python 3.x,Client,我的问题是如何向客户端发送函数, 我知道conn.sendall(b“欢迎使用服务器”)会将数据发送到客户端。 它可以被解码 我想知道如何发送一个函数到一个客户端,如 conn.sendall(函数())-这不起作用 我还想知道允许客户端接收我发送的函数的函数 我已经在上查找了一个可以执行此操作的函数,但没有找到。除非在客户端显式编码,否则您请求的功能基本上是不可能的。如果这是可能的,你可以写一个病毒,很容易传播到任何远程机器。相反,这是客户以任何方式解码传入数据的权利责任 考虑到客户机确实希望

我的问题是如何向客户端发送函数, 我知道conn.sendall(b“欢迎使用服务器”)会将数据发送到客户端。 它可以被解码

我想知道如何发送一个函数到一个客户端,如 conn.sendall(函数())-这不起作用

我还想知道允许客户端接收我发送的函数的函数


我已经在上查找了一个可以执行此操作的函数,但没有找到。

除非在客户端显式编码,否则您请求的功能基本上是不可能的。如果这是可能的,你可以写一个病毒,很容易传播到任何远程机器。相反,这是客户以任何方式解码传入数据的权利责任

考虑到客户机确实希望接收要执行的代码,问题是代码应以某种形式表示,同时

  • 与服务器上下文及其细节分离,可以在任何位置序列化和执行
  • 允许在沙箱中安全执行,因为非常罕见的客户端允许任意服务器代码在客户端执行任何操作
后者是一个极其复杂的话题;您可以阅读任何WWW浏览器安全历史记录-大多数已关闭的漏洞都是此类沙箱中的问题

(在某些环境中,这种执行是允许和需要的;例如,基于Erlang cookie的对等集群。但是,在这种集群中,也允许B侧在A侧执行任何操作。)

您应该从搜索符合功能和安全性需求的执行环境(高级虚拟机)开始。对于Python,您可以查看
多处理
模块:它的工作池实现不会传递代码本身,而是简化了执行请求的数据传递。另外,
marshall
pickle
模块还涵盖了在没有函数的情况下传递任意Python数据

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")