Python 3.4套接字sendall函数

时间:2014-11-29 20:48:02

标签: function sockets python-3.x client

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(b“欢迎使用服务器”)将数据发送给客户端。 哪个可以解码。

我想知道如何向客户端发送功能 conn.sendall(function()) - 这不起作用

此外,我想知道允许客户端接收我发送的功能的功能

我已经在python website上查找了可以执行此操作的功能,但我还没找到。

1 个答案:

答案 0 :(得分:1)

除非在客户端明确编码,否则您要求的功能基本上是不可能的。如果这是可能的,那么可以编写一种可以轻松传播到任何远程计算机的病毒。相反,客户有权以任何方式解码传入数据。

考虑到案例客户真的想要接收要执行的代码,问题是代码应该以同时表示的形式表示

  • 与服务器上下文及其细节分离,可以在任何地方序列化和执行
  • 允许在一种沙箱中安全执行,因为非常罕见的客户端将允许任意服务器代码在客户端执行任何操作。

后者是极其复杂的话题;您可以阅读任何WWW浏览器安全历史记录 - 大多数已关闭的漏洞都是此类沙箱中的问题。

(存在允许和期望执行此类执行的环境;例如,基于Erlang cookie的对等集群。但是,在此类集群中,B侧也允许在A侧执行任何操作。)

您应该首先搜索符合您的功能和安全需求的执行环境(高级虚拟机)。对于Python,您需要查看multiprocessing模块:它的工作池实现不会传递代码本身,但会简化为执行请求传递数据的过程。此外,marshalpickle模块涵盖了没有函数的任意Python数据传递。